Binary Tree inorder Traversal
Given a binary tree, returnInorderTraversal of its nodes 'values.
For example:
Given Binary Tree{1,#,2,3},
1 2 / 3
Return[1,3,2].
Note:Recursive solution is trivial, cocould You Do It iteratively?
Confused what"{1,#,2,3}"Means? > Read more on how binary tree is serialized on OJ.
Algorithm ideas:
1. Recursive Implementation
1 /** 2 * Definition for binary tree 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */10 public class Solution {11 List<Integer> res = new ArrayList<Integer>();12 public List<Integer> inorderTraversal(TreeNode root) {13 if(root == null) return res;14 if(root.left != null) inorderTraversal(root.left);15 res.add(root.val);16 if(root.right != null) inorderTraversal(root.right);17 return res;18 }19 }
Idea 2:
Non-recursive version:
By using the stack, all the left nodes of the current node (the left node of the Left node...) are pushed to the stack, and then the stack is played to process the current node and the right subtree.
The Code is as follows:
1 public class Solution { 2 public List<Integer> inorderTraversal(TreeNode root) { 3 List<Integer> res = new ArrayList<Integer>(); 4 if(root == null) return res; 5 Stack<TreeNode> stack = new Stack<TreeNode>(); 6 TreeNode current = root; 7 while(true){ 8 while(current != null){ 9 stack.push(current);10 current = current.left;11 }12 if(stack.isEmpty()) break;13 current = stack.pop();14 res.add(current.val);15 current = current.right;16 }17 return res;18 }19 }
[Leetcode] Binary Tree inordertraversal