[路飞]_N 叉树的前序遍历

589. N 叉树的前序遍历

题目

给定一个 N 叉树,返回其节点值的 前序遍历 。

N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。 

进阶:

递归法很简单,你可以使用迭代法完成此题吗?

示例1

image.png

输入: root = [1,null,3,2,4,null,5,6]
输出: [1,3,5,6,2,4]
复制代码

解题思路

递归法

深度优先遍历,先遍历根节点,然后递归遍历左子树,再递归遍历右子树

代码

var preorder = function (root) {
  let result = []
  helper(root)
  return result
  function helper(node) {
    if (!node) return
    result.push(node.val)
    const len = (node.children || []).length
    for (let i = 0; i < len; i++) {
      helper(node.children[i])
    }
  }
}
复制代码

迭代法

将N叉树推入栈中,在栈中依次推入N叉树的N个节点;

动态图

111.gif

代码

var preorder = function (root) {
  if (root === null) return []
  let result = []
  let stack = [root]
  while (stack.length) {
    const node = stack.pop()
    result.push(node.val)
    const len = (node.children || []).length
    for (let i = len - 1; i >= 0; i--) {
      stack.push(node.children[i])
    }
  }
  return result
}

复制代码

猜你喜欢

转载自juejin.im/post/7042956577703198728