一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 3 天,点击查看活动详情。
题目链接
589. N 叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com)
题目描述
给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
测试用例
示例 1:
输入:root = [1,null,3,2,4,null,5,6]
输出:[1,3,5,6,2,4]
限制
- 节点总数在范围 内
- n 叉树的高度小于或等于 1000
题目分析
首先,分享一下二叉树的标准的递归遍历代码
function trave(node) {
if (node == null) return;
// (1)
trave(node.left);
// (2)
trave(node.right);
// (3)
}
在遍历节点的过程中,对 当前节点 的处理的代码块
- 放在位置
(1)是为前序遍历,表示在遍历当前节点的子节点之前,需要为此节点做一些业务操作 - 放在位置
(2)为中序遍历,表示遍历完此节点的左子节点后,为此节点执行一些操作,最后再去遍历他的右子节点 - 放在位置
(3)则是后续遍历,表示在遍历完当前节点的子节点后,追加一些操作
那么,由此推广而来的 N叉树 遍历的模版则如下:
function trave(node) {
if (node == null) return;
// (1)
node.children.forEach(n => trave(n))
// (3)
}
同样的,在 (1) 位置的业务操作为 N叉树 的前序遍历;在 (2) 的位置的业务操作为 N叉树 的后序遍历
代码实现
指定一个数组变量 arr, 在上述模板的 (1) 的地方将当前 node.val 添加到 arr 中,最后返回 arr,代码如下:
var preorder = function(root) {
let arr = [];
trave(root);
return arr;
function trave(node) {
if (node == null) return;
arr.push(node.val);
for (let i = 0; i < node.children.length; i++) {
trave(node.children[i])
}
}
};