大家好呀,今天为大家带来的LeetCode的题目是LeetCode 144.二叉树的前序遍历。属于树操作中基础中的基础的题目。
题目
分析
通过题目我们就知道该题目有两种解法:递归和迭代。所谓的前序遍历就是根节点——左子树——右子树。
-
递归和迭代的区别
-
- 递归:循环调用
- 迭代:上一个问题是下一个问题的起点
解法一:递归
我们只需要现将根节点加入答案,然后递归调用左子树,然后再递归调用右子树即可。
解法二:迭代
其本质和递归一样,就是需要显式的维护一个栈。
代码实现
解法一:
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);
}
解法二:
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;
}
最后
- 如果觉得看完有收获,希望能给我点个赞,这将会是我更新的最大动力,感谢各位的支持
- 欢迎各位关注我的公众号【java冢狐】,专注于java和计算机基础知识,保证让你看完有所收获,不信你打我
- 如果看完有不同的意见或者建议,欢迎多多评论一起交流。感谢各位的支持以及厚爱。