给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
思路:和之前的中序、后序遍历相似,利用栈来完成迭代。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
ArrayList<Integer> res = new ArrayList<Integer>();
public List<Integer> preorderTraversal(TreeNode root) {
vlr(root);
return res;
}
private void vlr(TreeNode root){
if(root ==null) return;
Stack<TreeNode> stack = new Stack<TreeNode>();
while(root != null || !stack.isEmpty()){
while(root != null){
stack.push(root);
res.add(root.val);
root = root.left;
}
root = stack.pop();
root = root.right;
}
}
}