给定一个 N 叉树,返回其节点值的 前序遍历 。
N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
解题思路
这一题可以仿照二叉树的前序遍历,对树进行深度优先搜索
迭代的方式,利用栈的方法将每个子树存入栈中,然后一个一个取出
代码
// 递归
var preorder = function(root) {
let nes = []
var dfs = function(root) {
if (!root) return
nes.push(root.val)
for (child of root.children) {
dfs(child)
}
}
dfs(root)
return nes;
};
// 迭代
var preorder = function(root) {
let nes = []
let stack = [root]
while (stack.length) {
let root = stack.pop()
nes.push(root.val)
// 因为输出是中左右,左边子树比右边子树早输出,又因为存入的是栈,后进先出,所以子树第一个节点应该放到栈的末尾
for(let i = root.children.length - 1; i >= 0; i--) {
stack.push(root.children[i])
}
}
return nes;
};