http://www.lintcode.com/en/problem/binary-tree-inorder-traversal/

注意点: 看不明白的话,先拿二叉树按代码的逻辑跑一遍。

    栈中先放root的左子树,之后清空后放右子树。

    非递归:    

    while(!s.empty() || temp != null) {
      while(temp != null) {           
        s.push(temp);
        temp = temp.left;            //while循环加下面的这系列操作相当于在result中存放左结点和root
      }
      temp = s.pop();          //相当于result中存放左结点和root
      result.add(temp.val);        //相当于result中存放左结点和root
      temp = temp.right;      //在result中存放右结点
    }

 1  //分治
 2  public ArrayList<Integer> inorderTraversal(TreeNode root) {
 3      ArrayList<Integer> result = new ArrayList<Integer>();
 4      if(root == null) return result;
 5     
 6      ArrayList<Integer> left = inorderTraversal(root.left);
 7      ArrayList<Integer> right = inorderTraversal(root.right);
 8      result.addAll(left);
 9      result.add(root.val);
10      result.addAll(right);
11      return result;
12      
13  }
14  //非递归
15  public ArrayList<Integer> inorderTraversal(TreeNode root) {
16     Stack<TreeNode> stack = new Stack<TreeNode>();
17     ArrayList<Integer> result = new ArrayList<Integer>();
18     if(root == null) return result;
19     TreeNode temp = root;
20     //temp == null 表示此分支为null,不再需要往stack里添加结点,而是直接取出结点
21     while(!stack.empty() || temp != null){
22         while(temp != null) {
23             stack.push(temp);
24             temp = temp.left;
25         }
26         temp = stack.pop();
27         result.add(temp.val);
28         //temp != null,则相当于对右子树进行之前root的入栈操作 
29         temp = temp.right;  
30     }
31     return result;    
32  }
33  
34  //游走遍历, 要返回的结果一直作为参数在传递
35  public ArrayList<Integer> inorderTraversal(TreeNode root) {
36         ArrayList<Integer> result = new ArrayList<Integer>();
37         return    traverse(root, result);
38   }
39  private ArrayList<Integer> traverse(TreeNode root, ArrayList<Integer> result) {
40      if(root == null) return result;
41      traverse(root.left, result);
42      result.add(root.val);
43      traverse(root.right, result);
44      return result;
45  }
View