Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,3,2].
中序遍历一棵树,我们可以采用递归,也可以用迭代,用迭代的时候借助堆栈来完成。
[b]1,递归[/b]
[b]2,迭代[/b]
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,3,2].
中序遍历一棵树,我们可以采用递归,也可以用迭代,用迭代的时候借助堆栈来完成。
[b]1,递归[/b]
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if(root == null) return list;
getIT(root, list);
return list;
}
public void getIT(TreeNode root, List<Integer> list) {
if(root == null) return;
getIT(root.left, list);
list.add(root.val);
getIT(root.right, list);
}
}
[b]2,迭代[/b]
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
while(root != null || !stack.isEmpty()) {
if(root != null) {
stack.push(root);
root = root.left;
} else {
TreeNode node = stack.pop();
list.add(node.val);
root = node.right;
}
}
return list;
}
}