题目
Given a binary tree, return the preorder traversal of its nodes‘ values.
For example:
Given binary tree {1,#,2,3},
1
2
/
3
return [1,2,3].
Note: Recursive solution is trivial, could you do it iteratively?
分析二叉树的先序遍历,递归和非递归两种实现方法。
在非递归实现中,使用栈来保存访问顺序。
代码
import java.util.ArrayList;
import java.util.Stack;
public class BinaryTreePreorderTraversal {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public ArrayList<Integer> preorderTraversal(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
// recursivePreorderTraversal(root, list);
iterativePreorderTraversal(root, list);
return list;
}
private void iterativePreorderTraversal(TreeNode root,
ArrayList<Integer> list) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
while (node != null) {
list.add(node.val);
if (node.right != null) {
stack.push(node.right);
}
node = node.left;
}
}
}
private void recursivePreorderTraversal(TreeNode root,
ArrayList<Integer> list) {
if (root == null) {
return;
}
list.add(root.val);
recursivePreorderTraversal(root.left, list);
recursivePreorderTraversal(root.right, list);
}
}LeetCode | Binary Tree Preorder Traversal
原文:http://blog.csdn.net/perfect8886/article/details/19030895