144.二叉树的前序遍历 递归 | 94.二叉树的中序遍历 递归 |145.二叉树的后序遍历 递归
创始人
2024-03-08 09:41:42
0

144.二叉树的前序遍历

题目

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
在这里插入图片描述

输入:root = [1,null,2,3]
输出:[1,2,3]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

示例 4:
在这里插入图片描述

输入:root = [1,2]
输出:[1,2]

在这里插入图片描述

输入:root = [1,null,2]
输出:[1,2]

提示:

  • 树中节点数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-tree-preorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解 递归

递归的套路

递归三部曲

1.确定递归函数的参数和返回值
这一步需要从递归函数的作用推出递归函数需要的参数和返回值是什么。
2.确定终止条件
3.确定单层递归的逻辑

题解

思路:递归将大问题拆分成重复的小问题,所以需要忽略整体的流程,聚焦在某一个中间状态。

  1. 确定递归函数的参数和返回值
    题目是返回一颗树的前序遍历数组,我们可以将参数设置为结果数组res。还需要当前指向的节点指针root,标记已经遍历到的位置。
    所以递归函数的作用可以抽象为:将当前节点root的值放入结果数组res中
    返回值就是结果集res。
var preorderTraversal = function(root,res){	return res;
}
  1. 确定终止条件
    当遍历到叶子节点时,说明本次从上至下的递归已经结束,也就是一条路径遍历完毕。这个时候返回本次递归,状态会回到上一个状态。
if(root==null)return res;
  1. 确定单层递归的逻辑
    在这里插入图片描述
    假设此时在节点2的位置, 前序节点的处理顺序是:中 -> 左 -> 右

我们需要把节点2的值放入结果数组res中,然后在将节点2的左节点值放入数组res,最后将节点2的右节点值放入数组res。根据步骤1,我们知道递归函数的作用可以抽象为将当前节点root的值放入结果数组res中,所以节点2的左节点、右节点我们可以直接用递归来表示。

//前序遍历先处理节点
res.push(root.val);
//左
preorderTraversal(root.left,res);
//右
preorderTraversal(root.right,res);
return res;

代码

var preorderTraversal = function(root, res= []) {if(root==null)return res;res.push(root.val);preorderTraversal(root.left,res);preorderTraversal(root.right,res);return res;
};

94.二叉树的中序遍历 递归

题目

定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

示例 1:

输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

提示:

  • 树中节点数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-tree-inorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

根据144.前序遍历的题解,我们直接到第三步确定单层递归的逻辑

中序遍历的顺序是: 左->中->右,假设我们此时在节点2的位置。那么我们应该先将节点2的左孩子节点值放入数组之后,才将节点2的值放入数组,最后将节点2的右孩子节点值放入数组。

//中序遍历先走左子树
inorderTraversal(root.left,res);
//处理中间节点
res.push(root.val);
//右
preorderTraversal(root.right,res);
return res;

代码

var inorderTraversal = function(root,res=[]) {if(root==null)return res;inorderTraversal(root.left,res);res.push(root.val);inorderTraversal(root.right,res);return res;
};

总结

递归

//前序遍历
var preorderTraversal = function(root, res= []) {if(root==null)return res;res.push(root.val);//处理根节点preorderTraversal(root.left,res);//左preorderTraversal(root.right,res);//右return res;
};
//中序遍历
var inorderTraversal = function(root,res=[]) {if(root==null)return res;inorderTraversal(root.left,res);//左res.push(root.val);//处理根节点inorderTraversal(root.right,res);//右return res;
};
//后序遍历
var postorderTraversal = function(root,res=[]) {if(root==null)return res;postorderTraversal(root.left,res);//左postorderTraversal(root.right,res);//右res.push(root.val);return res;
};

相关内容

热门资讯

夫妻或情侣之间互发亲密照要不要... 2026年1月1日起,新修订的《中华人民共和国治安管理处罚法》将正式施行。近日,有媒体报道称,“明年...
权威离婚律师推荐:四川胡云律师... 在离婚纠纷日益复杂的当下,寻找一位权威且靠谱的离婚律师至关重要。那么,怎样的离婚律师才是的?收费标准...
尹锡悦,涉嫌受贿被起诉 综合新华社、央视新闻消息,当地时间24日,“金建希特检组”以 涉嫌受贿起诉韩国前总统尹锡悦, 并向其...
靖国神社被起诉! 当地时间23日,二战时期被日军强制征兵的部分韩籍遇难者遗属向首尔中央地方法院提起诉讼, 要求日本靖国...
最新!靖国神社被起诉 据央视新闻,当地时间23日,二战时期被日军强制征兵的部分韩籍遇难者遗属向首尔中央地方法院提起诉讼,要...
靖国神社,被起诉! 当地时间23日,二战时期被日军强制征兵的部分韩籍遇难者遗属向首尔中央地方法院提起诉讼,要求日本靖国神...
国台办:为“台独”分裂势力为虎... 中新社北京12月24日电 (陈建新 李百加)国务院台办发言人彭庆恩24日在北京表示,凡危害国家主权、...
怀宁县清河乡“一站式”调解架起... 诉求“只进一扇门”,调处“最多跑一地”。在怀宁县清河乡,这不仅仅是一句口号,更是当地群众化解矛盾纠纷...