[路飞] 42——leetcode - 589. N 叉树的前序遍历

110 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

589. N 叉树的前序遍历

题目分析

给定一个 n 叉树的根节点  root ,返回 其节点值的 **前序遍历 **。

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

思路讲解

同二叉树的前序遍历(根左右),输出根节点的值后从左到右递归的遍历子树

示例

image.png

image.png

示例一:
输入: root = [1,null,3,2,4,null,5,6]
输出: [1,3,5,6,2,4]

示例二:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[1,2,3,6,7,11,14,4,8,12,5,9,13,10]

代码

/*
 * @lc app=leetcode.cn id=589 lang=javascript
 *
 * [589] N 叉树的前序遍历
 */

// @lc code=start
/**
 * // Definition for a Node.
 * function Node(val, children) {
 *    this.val = val;
 *    this.children = children;
 * };
 */

/**
 * @param {Node|null} root
 * 注意:对根节点children的遍历
 * 递归:封装函数
 * @return {number[]}
 */
// 前期操作
var preorder = function(root) {
  let ans = [] // 定义一个空数组,存放将要遍历出来的所有节点 
  travese(root, ans) // 定义一个封装函数travese, 传递两个参数root和ans
  return ans // 返回ans
};

var travese = function (root, ans) {
  if (!root) return null // 判断根节点是否为空,如果为空直接返回,不为空,则将root.val放入ans中
  ans.push(root.val)
  // N叉树的子树是children,有很多的子树,通过遍历,将值放入ans
  for (x of root.children) {
    travese(x, ans)
  }
  return ans
}
// @lc code=end