力扣:二叉树的前序遍历
二叉树的前序遍历
一、题目
给你二叉树的根节点 root
,返回它节点值的 前序 遍历。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
示例 4:
1 |
|
示例 5:
1 |
|
提示:
- 树中节点数目在范围
[0, 100]
内 -100 <= Node.val <= 100
**进阶:**递归算法很简单,你可以通过迭代算法完成吗?
二、思路和原理
1.递归法逻辑
实现递归的三要素:
- 确实递归函数的参数和返回值
- 确定终止条件
- 确定单层逻辑
由于这道题的递归需要传入两个参数,既当前的根节点和最后的返回值,题目本身的函数只传入了一个参数,所以不符合递归的实现条件,此时我们可以自己单独再建一个函数用于实现递归。
-
本题中传入的参数和返回值:
1
Traversal(root,res)
-
终止条件:
1
2//当前的根节点为空
if(root==null){return;} -
单层逻辑
1
2
3
4
5//对于一个最简单的只要两层的二叉树的逻辑
//先取出并保存根节点的值,然后获取其左子树的值并保存,然后是右子树....以此内推
val.push(res);
Traversal(res.left,val);//处理左子树
Traversal(res.right,val);//处理右子树
2.迭代法逻辑
迭代主要要用到栈先入后出的特性:
前序遍历的顺序是:根–>左–>右
那么前序遍历入栈的顺序就是:根节点入栈–>弹栈–>右子树入栈–>左子树入栈–>左子树弹栈–>右子树弹栈
三、解题
1.递归法
1 |
|
2.迭代法
1 |
|
力扣:二叉树的前序遍历
https://chen77.top/2024/01/03/leetcode/144二叉树的前序遍历/