[路飞]_leetcode_589. N 叉树的前序遍历

96 阅读1分钟

给定一个 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;
};