问题来源与描述
问题来源:LeetCode 144,二叉树的前序遍历
自己在面试中也遇到了。
思路
二叉树的前序遍历的顺序是根,左,右。
用递归来做只需要几行代码:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
preOrder(res, root);
return res;
}
public void preOrder(List<Integer> res, TreeNode root) {
if (root == null) return;
res.add(root.val);
preOrder(res, root.left);
preOrder(res, root.right);
}
}
用非递归需要用到一个栈,首先根节点入栈,将根节点的val加入res中,之后右孩子入栈,左孩子入栈。终止条件是栈为空。注意判断节点是否为null。代码如下:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
Deque<TreeNode> stack = new LinkedList<>();
if(root == null) return res;
stack.push(root);
while (!stack.isEmpty()) {
TreeNode temp = stack.pop();
res.add(temp.val);
if (temp.right != null) stack.push(temp.right);
if (temp.left != null) stack.push(temp.left);
}
return res;
}
}