原始题目如下:
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?
题目提示用迭代的方式进行遍历。在OJ平台Discuss区域,各位大神的指导下,用堆栈的方式记录遍历节点来实现。代码如下
import java.util.*;
public class Solution {
public static List<Integer> preorderTraversal(TreeNode root){
ArrayDeque<TreeNode> stack = new ArrayDeque<TreeNode>();
List<Integer> a = new LinkedList<Integer>();
if(root == null){
return a;
}
else{
stack.add(root);
while(!stack.isEmpty()){
TreeNode tmp = stack.removeLast();
a.add(tmp.val);
if(tmp.right != null)
stack.add(tmp.right);
if(tmp.left != null)
stack.add(tmp.left);
}
return a;
}
}
public static void main(String args[]){
List<Integer> a = new LinkedList<Integer>();
TreeNode p = new TreeNode(1);
TreeNode p2 = new TreeNode(2);
TreeNode p3 = new TreeNode(3);
TreeNode p4 = new TreeNode(4);
TreeNode p5 = new TreeNode(5);
TreeNode p6 = new TreeNode(6);
TreeNode p7 = new TreeNode(7);
TreeNode p8 = new TreeNode(8);
p.left = p2;
p.right = p3;
p2.left = p4;
p2.right = p5;
p5.left = p6;
p5.right = p7;
p3.left = null;
p3.right = p8;
a = preorderTraversal(p);
for(int i = 0; i < a.size(); i ++ ){
System.out.println(a.get(i));
}
}
}