For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,3,2].
中序遍历一棵树,我们可以采用递归,也可以用迭代,用迭代的时候借助堆栈来完成。
1,递归
/** * 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); } }
2,迭代
/** * 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; } }