94. Binary Tree Inorder Traversal

 
 

 

/////// recursive 
class Solution {
    List<Integer> result = new ArrayList<>();
    public List<Integer> inorderTraversal(TreeNode root) {
      if(root == null){
        return result;
      }
      inorderTraversal(root.left);
      result.add(root.val);
      inorderTraversal(root.right);
      return result;
    }
}        
///////  recursion with global var 

class Solution {
    List<Integer> result = new ArrayList<>(); // has to be here so theres only one result , the result here is global variable 

    public List<Integer> inorderTraversal(TreeNode root) {
      if(root == null) return result;
      if(root.left != null) inorderTraversal(root.left);
      result.add(root.val);
      if(root.right != null) inorderTraversal(root.right);
      return result;
    }
} 

///////. recursion without global var, with a helper function 


class Solution {
    public List < Integer > inorderTraversal(TreeNode root) {
      List<Integer> result = new ArrayList<>();
      if(root == null) return result;
      helper(root, result);
      return result;
    }
  
    private void helper(TreeNode root, List<Integer> result){
      
      if(root.left != null) helper(root.left, result);
      result.add(root.val);
      if(root.right != null) helper(root.right, result);
    }
}


///
class Solution {
    public List < Integer > inorderTraversal(TreeNode root) {
        List < Integer > res = new ArrayList < > ();
        helper(root, res);
        return res;
    }

    public void helper(TreeNode root, List < Integer > res) {
        if (root != null) {
            if (root.left != null) {
                helper(root.left, res);
            }
            res.add(root.val);
            if (root.right != null) {
                helper(root.right, res);
            }
        }
    }
}

 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        pushLeft(root, stack);
        while(!stack.isEmpty()){
            TreeNode cur = stack.pop();
            result.add(cur.val);
            if(cur.right != null){
                pushLeft(cur.right, stack);
            }
        }
        return result;
    }
    private void pushLeft(TreeNode node, Stack<TreeNode> stack){
        while(node != null){ /// use while , not if 
            stack.push(node);
            node = node.left;
        }
    }

}

class Solution{
    public List<Integer> inorderTraversal(TreeNode root){
        List<Integer> result = new ArrayList<>();
        if(root == null){
            return result;
        }
        helper(root, result);
        return result;
    }
    private void helper(TreeNode root, List<Integer> result){
        if(root.left != null){
            helper(root.left, result);
        }
        result.add(root.val);
        if(root.right != null){
            helper(root.right, result); // don't forget to pass result as one param
        }
      
    }
}
  

 

 

 

Given a binary tree, return the inorder traversal of its nodes' values.

Example:

Input: [1,null,2,3]
   1
    \
     2
    /
   3

Output: [1,3,2]

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

posted on 2018-07-19 12:23  猪猪&#128055;  阅读(103)  评论(0)    收藏  举报

导航