题目:
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}, return [1,3,2]
Note:
Recursive solution is trivial, could you do it iteratively?
思路1:
Inorder: Left->Parent->Right
使用Stack,先放入所有最右节点,在进行取之判断
iteration
Code:
public List<Integer> inorderTraversal(TreeNode root) {
ArrayList<Integer> al = new ArrayList<Integer>();
if(root==null) return al;
Stack<TreeNode> sk = new Stack<TreeNode>();
while(!sk.empty()||root!=null){
while(root!=null){
sk.push(root);
root=root.left;
}
if(!sk.empty()){
root=sk.pop();
al.add(root.val);
root=root.right;
}
}
return al;
}
备注1:
List 是一个接口,ArrayList 是List 的一个实例
JAVA里 Stack 没有top指针
注意while内容
思路2:
使用Recursion,非本题
Code:
void in_order_traversal(BinaryTree *p) {
if (!p) return;
in_order_traversal(p->left);
cout << p->data;
in_order_traversal(p->right);
}
迭代: A调用B,e.g. 循环
递归:A调用A