首页 > 代码库 > [leetcode]Binary Tree InorderTraversal

[leetcode]Binary Tree InorderTraversal

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    /   3

 

return [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 }

 

[leetcode]Binary Tree InorderTraversal