题目
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?
分析老套路,递归(解法1)和非递归(解法2)各来一遍。
解法1
import java.util.ArrayList; public class BinaryTreeInorderTraversal { public ArrayList<Integer> inorderTraversal(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); solve(root, list); return list; } private void solve(TreeNode root, ArrayList<Integer> list) { if (root == null) { return; } solve(root.left, list); list.add(root.val); solve(root.right, list); } }解法2
import java.util.ArrayList; import java.util.Stack; public class BinaryTreeInorderTraversal { public ArrayList<Integer> inorderTraversal(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); while (root != null) { stack.push(root); root = root.left; } while (!stack.isEmpty()) { TreeNode node = stack.pop(); list.add(node.val); TreeNode right = node.right; while (right != null) { stack.add(right); right = right.left; } } return list; } }
LeetCode | Binary Tree Inorder Traversal,布布扣,bubuko.com
LeetCode | Binary Tree Inorder Traversal
原文:http://blog.csdn.net/perfect8886/article/details/21740797