2019-03-25 14:10:51

非递归遍历二叉树的Java版本实现之前已经进行了总结,这次做的是非递归遍历多叉树的Java版本实现。

在非递归遍历二叉树的问题中我个人比较推荐的是使用双while的方式来进行求解,因为这种方法比较直观,和遍历的顺序完全对应。

但是在非递归遍历多叉树的时候,使用双while方法虽然依然可行,但是就没有那么方便了。

一、N-ary Tree Preorder Traversal

问题描述:

问题求解:

    public List<Integer> preorder(Node root) {if (root == null) return new ArrayList<>();List<Integer> res = new ArrayList<>();Stack<Node> stack = new Stack<>();stack.push(root);while (!stack.isEmpty()) {Node cur = stack.pop();res.add(cur.val);for (int i = cur.children.size() - 1; i >= 0; i--) if (cur.children.get(i) != null) stack.push(cur.children.get(i));}return res;}

二、N-ary Tree Postorder Traversal

问题描述:

问题求解:

public List<Integer> postorder(Node root) {if (root == null) return new ArrayList<>();List<Integer> res = new ArrayList<>();Stack<Node> stack = new Stack<>();stack.push(root);while (!stack.isEmpty()) {Node cur = stack.pop();res.add(0, cur.val);for (int i = 0; i < cur.children.size(); i++) if (cur.children.get(i) != null)stack.push(cur.children.get(i));}return res;}

 

三、N-ary Tree Level Order Traversal

问题描述:

问题求解:

    public List<List<Integer>> levelOrder(Node root) {if (root == null) return new ArrayList<>();List<List<Integer>> res = new ArrayList<>();Queue<Node> q = new LinkedList<>();q.offer(root);while (!q.isEmpty()) {int size = q.size();res.add(new ArrayList<>());for (int i = 0; i < size; i++) {Node cur = q.poll();res.get(res.size() - 1).add(cur.val);for (int j = 0; j < cur.children.size(); j++) {if (cur.children.get(j) != null) q.offer(cur.children.get(j));}}}return res;}

  

 

转载于:https://www.cnblogs.com/TIMHY/p/10593528.html

非递归遍历N-ary树Java实现相关推荐

  1. java 建树源码_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...

    import java.util.ArrayDeque; import java.util.Queue; import java.util.Stack; //二叉树的建树,前中后 递归非递归遍历 层序 ...

  2. Java实现二叉树的创建、递归/非递归遍历

    近期复习数据结构中的二叉树的相关问题,在这里整理一下 这里包含: 1.二叉树的先序创建 2.二叉树的递归先序遍历 3.二叉树的非递归先序遍历 4.二叉树的递归中序遍历 5.二叉树的非递归中序遍历 6. ...

  3. 树:二叉树的非递归遍历算法

    二叉树的递归遍历 二叉树的递归遍历算法,写法很简单,比如说前序遍历树,如下: //前序遍历 void PreOrderTraverse(BiTree tree) {if (NULL != tree){ ...

  4. 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构

    本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...

  5. 【树】二叉树的两种非递归遍历方法

    非递归的遍历需要使用栈保存当前不输出的结点,并且三种遍历顺序步骤有所不同. 中序遍历 1.查看其当前结点是否为空: 若非空则将当前结点入栈,指针指向其左孩子: 若当前结点为空,说明上一个入栈的结点没有 ...

  6. 树的递归与非递归遍历算法

    树的递归与非递归遍历算法 树的递归与非递归遍历算法 树的遍历 实例 树遍历的口诀 树的递归遍历代码 树的先序遍历 树的中序遍历 树的后序遍历 递归遍历思想 树的非递归遍历 树的先序非递归遍历 先序遍历 ...

  7. 二叉树的非递归遍历(java版)

    二叉树的递归遍历比较简单,这里就不聊了.今天主要聊聊二叉树的非递归遍历,主要借助于"栈"后进先出的特性来保存节点的顺序,先序遍历和中序遍历相对来说比较简单,重点理解后序遍历. 1. ...

  8. java建树_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...

    本文实例讲述了Java实现的二叉树常用操作.分享给大家供大家参考,具体如下: import java.util.ArrayDeque; import java.util.Queue; import j ...

  9. 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程

    图的邻接矩阵表示 通常图的表示有两种方法:邻接矩阵,邻接表. 本文用邻接矩阵实现,一是代码量更少,二是代码风格也更贴近C语言.但不论是图的哪种实现方式,其基本的实现思想是不变的. 1:节点的信息,我们 ...

最新文章

  1. Java8的集合:HashMap的实现原理
  2. 2021-10-20 Speaking Class
  3. 互联网1分钟 |1219
  4. Bundle Identifier
  5. html导航教程视频,导航_HTML+CSS前端基础知识教程_腾讯视频
  6. java反射机制及使用案例
  7. python面试题之多线程好吗?列举一些让Python代码以并行方式运行的方法
  8. 5G( 9)---开发者:你如何迎接5G时代的到来?
  9. 微信做了个新功能,网友并不买账:就为了给QQ充会员?
  10. 编写适合于自己的代码生成器 (zhuan)
  11. 模拟电子技术基础-第一章-常用半导体器件
  12. Arch-004ArchLinux搜狗输入法安装
  13. 国内资深安全专家详谈网页***
  14. 多模态生物特征识别 基于人脸与人耳信息pdf
  15. c语言 乱码转化为16进制_编码格式介绍及C语言处理汉字编码
  16. 27.html的定位(position)和偏移量(offset)
  17. java StringUtil之String工具类
  18. lssvr matlab,lssvm(最小二乘支持向量机)matlab
  19. Mysql-DATE_FORMAT()日期格式
  20. 扣扣浏览器mini java_WebQQ Mini各种浏览器试用

热门文章

  1. Memcached安装和基本使用
  2. 世界机器人大会特种机器人报到高难度的高危险的活让它们来!
  3. 写给想转行机器学习深度学习的同学
  4. 声场模型如何区分近场和远场
  5. linux服务器在线人数,servlet监听器实现在线人数统计源码实例
  6. axure删除的页面怎么恢复_Axure如何应对意外关闭
  7. laravel 任务队列_Laravel 队列的简单使用例子
  8. python实现排序_python实现以及所有排序大总结【转】
  9. 026_使用eclipse生成hashCode和equals方法
  10. 乐高机器人java程序代码_用JAVA编写一个乐高机器人躲避障碍物运动到目标点的程序....