一.#### 144. 二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4:
输入:root = [1,2]
输出:[1,2]
思路:前面有文章解释过二叉树的三种遍历情况,这题是需要前序遍历,就是 根节点 -> 左节点 -> 右节点,这题的解题思路是递归思想,代码如下:
var preorderTraversal = function(root) {
if(!root) return [];
let ans = [];
return _preorder(root,ans);
};
var _preorder = function(root,ans){
if(!root) return;
//保存根节点
ans.push(root.val);
//遍历左边节点
_preorder(root.left,ans);
//遍历右边节点
_preorder(root.right,ans);
return ans;
}
二.#### 226. 翻转二叉树
给你一棵二叉树的根节点 `root` ,翻转这棵二叉树,并返回其根节点。
**示例 1:**
输入: root = [4,2,7,1,3,6,9]
输出: [4,7,2,9,6,3,1]
示例 2:
输入: root = [2,1,3]
输出: [2,3,1]
示例 3:
输入: root = []
输出: []
思路:这题的解题思路也是递归思想,二叉树也是前序遍历,先将根节点下的左右节点交换,一次遍历替换,代码如下:
* @param {TreeNode} root
* @return {TreeNode}
*/
var invertTree = function(root) {
if(!root) return root;
//中间变量保存左节点
let left = root.left;
//将左边节点替换成右边节点
root.left = root.right;
//右边节点替换成左边节点
root.right = left;
//替换后的左边节点依次替换
invertTree(root.left);
//替换后的右边节点依次替换
invertTree(root.right);
return root;
};
三.#### 589. N 叉树的前序遍历
给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
示例 1:
输入: root = [1,null,3,2,4,null,5,6]
输出: [1,3,5,6,2,4]
示例 2:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[1,2,3,6,7,11,14,4,8,12,5,9,13,10]
思路:本题是多叉树前序遍历,根节点 -> 左节点 -> 右节点,跟二叉树类似,二叉树是只有左右节点,多茶树是多个节点,存储在children里,我们只要遍历children就可实现个个遍历,代码如下:
* @param {Node|null} root
* @return {number[]}
*/
var preorder = function(root) {
if(!root) return [];
let ans = [];
//从根节点开始遍历
return _preorder(root,ans)
};
var _preorder = function(root,ans){
if(!root) return;
//保存根节点
ans.push(root.val);
for(let i = 0; i < root.children.length; i ++){
//遍历每个子节点
_preorder(root.children[i],ans);
}
return ans;
}