给你二叉树的根节点
root
,返回它节点值的 前序 遍历。示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
解释:
示例 2:
输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]
输出:[1,2,4,5,6,7,3,8,9]
解释:
示例 3:
输入:root = []
输出:[]
示例 4:
输入:root = [1]
输出:[1]
提示:
- 树中节点数目在范围
[0, 100]
内-100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
递归法:
迭代法:
迭代 原本 左 中 右 但是入栈的时候要左 右 中 因为栈式先进后出的
注意遍历的时候开始是遍历根节点的左右 而不是整棵树的左右,并且这样能保证每次都遍历的根节点。加上判断条件则能避免没有的节点
public List<Integer> preorderTraversal(TreeNode root) {
List resultList = new ArrayList<>();
if(root == null) return resultList;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode node = stack.pop();
resultList.add(node.val);
if(node.right != null){
stack.push(node.right);
}
if(node.left != null){
stack.push(node.left);
}
}
return resultList;
}