給定一個二叉樹,返回它的 前序 遍歷。
示例:
輸入: [1,null,2,3]
1
2
/
3
輸出: [1,2,3]
進階: 遞歸算法很簡單,你可以通過迭代算法完成嗎?
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
// 遞歸算法
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> ret=new ArrayList<Integer>();
qianxu(root,ret);
return ret;
}
public void qianxu(TreeNode root,List<Integer> ret){
if(root!=null){
ret.add(root.val);
}else{
return;
}
qianxu(root.left,ret);
qianxu(root.right,ret);
}
// 非遞歸算法
public List<Integer> preorderTraversal(TreeNode node) {
List<Integer> ret=new ArrayList<Integer>();
LinkedList<TreeNode> queue=new LinkedList();
while(queue.size()!=0||node!=null){
while(node!=null){
queue.addLast(node);
ret.add(node.val);
node=node.left;
}
if(queue.size()!=0){
node=queue.removeLast();
node=node.right;
}
}
return ret;
}
}