这道题,一看n叉树不知道怎么操作了,最近都是在操作二叉树,看了解析以后,发现n叉树和二叉树的遍历很像,就是中间步骤需要特殊处理,一下为记录,也是两种常用方法
方法一 迭代
var preorder = function(root) {
if(!root) return [];
let stack = [root];
const res = [];
while(stack.length) {
const node = stack.shift();
res.push(node.val);
// 这一步区别与二叉树
if(node.children.length > 0) {
// 这里有别于层序遍历,用 node.children 连接 queue,而不是 queue.concat(node.children)这样就实现了前序遍历的效果
stack = node.children.concat(stack)
}
}
return res;
};
方法二 递归
var preorder = function(root) {
let res = []
function dfs(node) {
if(!node) return;
res.push(node.val);
// for(let i = 0; i<node.children.length; i++){
// dfs(node.children[i])
// }
node.children.forEach(item => {
dfs(item)
})
// if(node.children.lenght > 0) {
// node.children.forEach(item => {
// dfs(item)
// })
// }
}
dfs(root);
return res;
};