Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree{1,#,2,3}
,1 2 / 3return
[1,3,2]
.Note: Recursive solution is trivial, could you do it iteratively?
confused what
"{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
算法思路:
1. 递归实现
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 }
思路2:
非递归版本:
借用栈,将当前节点的所有左节点(左节点的左节点....)压栈,然后依次弹栈处理当前节点并处理右子树
代码如下:
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 }