一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情。
前言
力扣第144题 二叉树的前序遍历
如下所示:
给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
示例 1:
输入: root = [1,null,2,3]
输出: [1,2,3]
一、思路
题目非常的简短,要求我们使用 前序遍历的方式来获取各节点的值,并将值按顺序存入列表中。首先需要了解 前序遍历
的含义。
前序遍历
是指:根节点
在 左右孩子
中的位置,前序
是指先遍历 根节点
,即遍历的顺序为根左右,如下图所示:
既然确定了遍历的顺序,那这一题很容易就能想到使用 递归
来解决。大致的步骤如下所示:
- 遍历根节点,并收集根节点的值
- 继续遍历根节点的左孩子,并收集当前节点的值
- 最后遍历根节点的右孩子,并收集当前节点的值
举个例子
此处以如下的二叉树作为例子:
绿色:标识当前正在遍历的节点
- 遍历根节点
1
- 遍历左孩子
2
- 遍历右孩子
3
- 遍历右孩子的左孩子
4
- 最终返回结果:
[1, 2, 3, 4]
即可
二、实现
实现代码
实现代码很简短,这是一个大多数递归的模板代码。
List<Integer> ret = new ArrayList<>();
public List<Integer> preorderTraversal(TreeNode root) {
dfs(root);
return ret;
}
public void dfs(TreeNode node){
if (node == null)
return;
ret.add(node.val);
dfs(node.left);
dfs(node.right);
}
测试代码
public static void main(String[] args) {
TreeNode treeNode = new TreeNode(1, new TreeNode(2), new TreeNode(3));
new Number144().preorderTraversal(treeNode);
}
结果
三、总结
这一题可以说是非常经典的递归问题了,第一次遇到还是在大学中的数据结构课程上面。现在碰到这种简单题目,已经可以轻松实现了,hhhh~
感谢看到最后,非常荣幸能够帮助到你~♥
如果你觉得我写的还不错的话,不妨给我点个赞吧!如有疑问,也可评论区见~