Binary Tree Inorder Traversal - LeetCode

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].

Note: Recursive solution is trivial, could you do it iteratively?

 

Iterative Thoughts:

1. 把由根节点到最左边的节点的路径存入一个linked list

2. 用removeLast() 来访问每一个节点,如果该节点有右子树,将右节点的最左节点路径存入list

3. 重复第二步直到list为空

 

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ArrayList<Integer> inorderTraversal(TreeNode root) {
        ArrayList<Integer> res= new ArrayList<Integer>();
        if(root==null) return res;
        LinkedList<TreeNode> nodes=new LinkedList<TreeNode>();
        nodes.addAll(findLeftMost(root));
        while(!nodes.isEmpty()){
            TreeNode tmp=nodes.removeLast();
            res.add(tmp.val);
            if(tmp.right!=null){
            nodes.addAll(findLeftMost(tmp.right));
            }
        }
        return res;   
    }
    
    public LinkedList<TreeNode> findLeftMost(TreeNode n){
        LinkedList<TreeNode> res= new LinkedList<TreeNode> ();
        while(n!=null){
            res.add(n);
            n=n.left;
        }
return res; } }

Recursive Thoughts:

太直白了,直接上code

public class Solution {
    public ArrayList<Integer> inorderTraversal(TreeNode root) {
       ArrayList<Integer> res= new ArrayList<Integer>();
       if(root==null)return res;
       if(root.left!=null){
            res.addAll(inorderTraversal(root.left));
       }
       res.add(root.val);
       if(root.right!=null){
            res.addAll(inorderTraversal(root.right));
       }
       return res;
    }
}

 

posted on 2014-04-14 09:55  iisahu  阅读(125)  评论(0编辑  收藏  举报

导航