94. Binary Tree Inorder Traversal

1. Recursive

 1 public List<Integer> inorderTraversal(TreeNode root) {
 2         List<Integer> res = new ArrayList<Integer>();
 3         if(root == null) {
 4             return res;
 5         }
 6         dfs(res, root);
 7         return res;
 8     }
 9     
10     private void dfs(List<Integer> res, TreeNode root) {
11        if(root == null) {
12            return;
13        } 
14        dfs(res, root.left);
15        res.add(root.val);
16        dfs(res, root.right);
17     }

 

 

2. iterative

建一个堆栈,如果是左边还有节点,那就一直走到底。

如果发现已经没有左节点了,那么就从堆栈里弹出最后一个,访问它,然后指向它的右节点(因为它的全部左节点和它本身都已经被访问过了)

 1     public List<Integer> inorderTraversal(TreeNode root) {
 2         List<Integer> res = new ArrayList<Integer>();
 3         if(root == null) {
 4             return res;
 5         }
 6         Stack<TreeNode> stack = new Stack<TreeNode>();
 7         stack.push(root);
 8         TreeNode p = root;
 9         while(!stack.isEmpty() || p != null) {
10             if(p != null) {
11                 stack.push(p);
12                 p = p.left;
13             } else {
14                 TreeNode cur = stack.pop();
15                 res.add(p.val);
16                 p = p.right;
17             }
18         }
19         return res;
20     }

 

posted @ 2016-05-04 05:06  warmland  阅读(120)  评论(0编辑  收藏  举报