一、题目要求
给定一个二叉树的根节点 root
,返回 它的 前序 遍历 。
二、递归解法
2.1 初步思想
中序遍历中左右,因此入队在开始。
2.2 代码实现
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList();
midTraversal(list,root);
return list;
}
public void midTraversal(List<Integer> l,TreeNode root) {
if(root == null)return;
l.add(root.val);
midTraversal(l,root.left);
midTraversal(l,root.right);
}
}
2.3 运行结果
三、堆栈解法
3.1 算法思想
创建一个栈,一路向左子树遍历并入栈,入栈的是根节点,因此直接弹栈加入队列。直到该节点为空。弹出栈的元素无左儿子,随后去其右侧重复之前过程。
3.2 代码实现
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList();
Deque<TreeNode> stack = new LinkedList();
while(root != null || !stack.isEmpty()) {
while(root != null) {
stack.push(root);
list.add(root.val);
root = root.left;
}
root = stack.pop();
root = root.right;
}
return list;
}
}