(54)~589. N 叉树的前序遍历

90 阅读1分钟

这道题,一看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;
};