原题链接:https://leetcode.com/problems/n-ary-tree-preorder-traversal/

1. 题目介绍

Given an n-ary tree, return the preorder traversal of its nodes’ values.
For example, given a 3-ary tree:

给出一个n-叉树,返回先序遍历的结果。
如果是二叉树,先序遍历的顺序是:
1 根结点
2 左子树
3 右子树
如果是n叉树,那么就是先遍历根节点,然后依次遍历各个子树。
比如下面这个三叉树:

Return its preorder traversal as: [1,3,5,6,2,4].
返回的结果是:[1,3,5,6,2,4].

2. 解题思路

2.1 递归

递归的方法仍然是最容易实现的,先将根节点放入List,然后依次遍历其余的子树。

实现代码

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val,List<Node> _children) {val = _val;children = _children;}
};
*/
class Solution {public List<Integer> preorder(Node root) {List<Integer> l = new ArrayList<>();return helper(root,l);}public List<Integer> helper(Node root,List<Integer> l){if(root == null){return l;}l.add(root.val);for(Node i : root.children){helper(i,l);}return l;}
}

2.2 迭代

使用堆栈辅助遍历。
每当遍历一个节点的时候,首先将根节点的val存入List中。
然后倒着将每个子树都放入堆栈中,第一个子树不要放入堆栈,用于继续遍历。
当该节点没有子树的时候,弹出栈顶存放的节点继续遍历。
实现代码

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val,List<Node> _children) {val = _val;children = _children;}
};
*/
class Solution {public List<Integer> preorder(Node root) {List<Integer> l = new ArrayList<>();Stack<Node> s = new Stack<>();Node temp = root;while(temp != null || s.isEmpty() != true){if(temp != null){l.add(temp.val);int length = temp.children.size();if(length == 0){temp = null;continue;}for(int i = length -1; i > 0 ; i--){s.push(temp.children.get(i));}temp = temp.children.get(0); }else{temp = s.pop();}}return l;}
}

[LeetCode] 589. N-ary Tree Preorder Traversal相关推荐

  1. 【二叉树迭代版前序遍历】LeetCode 144. Binary Tree Preorder Traversal

    LeetCode 144. Binary Tree Preorder Traversal Solution1:递归版 二叉树的前序遍历递归版是很简单的,前序遍历的迭代版相对是最容易理解的. 迭代版链接 ...

  2. LeetCode:144_Binary Tree Preorder Traversal | 二叉树的前序遍历 | Medium

    题目:Binary Tree Preorder Traversal 二叉树的前序遍历,同样使用栈来解,代码如下: 1 struct TreeNode { 2 int val; 3 TreeNode* ...

  3. [Lintcode]66. Binary Tree Preorder Traversal/[Leetcode]144. Binary Tree Preorder Traversal

    66. Binary Tree Preorder Traversal/144. Binary Tree Preorder Traversal 本题难度: Easy/Medium Topic: Bina ...

  4. 14 二叉树的前序遍历(Binary Tree Preorder Traversal)

    文章目录 1 题目 2 描述 3 解决方案 3.1 递归算法 3.1.1 遍历法(Traverse) 思路 源码 3.1.2 分治法(Devide And Conquer) 思路 源码 3.2 非递归 ...

  5. leetcode 589. N-ary Tree Preorder Traversal

    一题目 Given an n-ary tree, return the preorder traversal of its nodes' values. Nary-Tree input seriali ...

  6. [LeetCode 题解]: Binary Tree Preorder Traversal

    前言 [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a binary ...

  7. 589. N 叉树的前序遍历(javascript)589. N-ary Tree Preorder Traversal

    给定一个 n 叉树的根节点 root ,返回 其节点值的 前序遍历 . n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例). Given the root of ...

  8. [leetcode] Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...

  9. leetcode 144. Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...

最新文章

  1. JZOJ 3943. 【GDOI2015模拟11.29】环游世界
  2. python游戏代码示例_练习项目20:使用python制作游戏(中)
  3. HOL中的四种排序,Order By、Sort By、Distribute By、Cluster By
  4. FPGA设计者的5项基本功
  5. 商丘高中计算机考试成绩查询系统,河南省中招考生服务平台2019商丘中考成绩查询系统入口...
  6. 刚刚收割阿里、腾讯等大厂 Offer,他说这些话一定要和你们说一下
  7. 如何使用SVG生成超酷的页面预加载素描动画效果
  8. idea 搜索不到gsonformat_IDEA开发工具插件之GsonFormat
  9. 机器人研究方向的自我学习[2] Matlab机器人工具箱 欧拉角 参考书:《机器人学导论》第四版
  10. TP5.1导出指定的多个日期的数据记录
  11. 有了这个列表,程序员不愁没练手的小项目了
  12. Mac看电视直播(通过MUMU安卓模拟器+自定义直播软件apk)
  13. 域名查询工具DMitry
  14. 大提顿国家公园美丽风景Mac动态壁纸
  15. jquery轮播插件
  16. .gitignore 不生效的解决方案
  17. Mysql5.7安装超详细教学
  18. Pruning Filters for Efficient ConvNets详解
  19. 虚拟机 服务器 断电,意外断电自动启动服务器和虚拟机的教程
  20. case when 用法

热门文章

  1. surface pro4-7安装黑苹果教程
  2. 20160218.CCPP体系具体解释(0028天)
  3. 选择排序-简单选择排序
  4. 工作之余,请IT人员开怀大笑吧
  5. LuoguP1710 地铁涨价
  6. 抓取Bilibili哔哩哔哩网站视频(Java和Python双版本实现)
  7. win7 android 双系统平板 p1000,优派Win7/Android双系统ViewPad 100
  8. 第一次尝试使Windows Live Writer发布日志
  9. Linux 搭建Owncloud 私有云
  10. 管理大规模容器集群能力包括_阿里巴巴大规模神龙裸金属 Kubernetes 集群运维实践...