一、原题
Binary Tree Preorder Traversal
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?
二、分析
前序遍历基本思路:(1)所有节点先遍历左孩子节点(2)再以右孩子节点为根节点,按(1)中方式递归遍历。这里不使用递归的方法,采用一个栈来记录已经遍历过的节点,具体思路如下:使用一个指针(称为node)指向当前遍历的节点,若不为空,node的val值入队,将node压入栈,node指向其左孩子节点;若为空,栈pop(),node等于栈顶元素的右孩子节点.
三、代码(java)
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result =new ArrayList();
Stack<TreeNode> biTree=new Stack();
if(root==null) return result;
TreeNode node=root;
while(root!=null){
while(node!=null){
result.add(node.val);
biTree.add(node);
node=node.left;
}
if(biTree.isEmpty()){
break;
}
else {
node=biTree.pop();
node=node.right;
}
}
return result;
}
}