题目
给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
示例
方法一:递归。和中序的递归差不多
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
preorder(root,res);
return res;
}
public void preorder(TreeNode root,List<Integer> res){
if(root == null)
return;
res.add(root.val);
preorder(root.left,res);
preorder(root.right,res);
}
}
方法二:迭代
思想就是,每遍历一个节点,先输出,然后将其左子树依次按照左分支输出并入栈,直至遇到null,然后同理将其右子树输出并入栈
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
if (root == null) {
return res;
}
Deque<TreeNode> stack = new LinkedList<TreeNode>();
TreeNode node = root;
while (!stack.isEmpty() || node != null) {
while (node != null) {
res.add(node.val);
stack.push(node);
node = node.left;
}
node = stack.pop();
node = node.right;
}
return res;
}
}