前序遍历二叉树代码_二叉树遍历、二叉树深度、代码示例,一点课堂(多岸学院)...
二叉树的遍历 ★★★★★TreeNode 节点/ Definition for a binary tree node. /public class TreeNode {int val;TreeNode left;TreeNode right;
TreeNode(int x) {val = x;}}
- 递归调用 (深度优先遍历) ★☆☆☆☆
- public void preorderTraversal(TreeNode root) {
- if (root == null) {
- return;
- }
- // 可调整前、中、后序遍历
- System.out.print(root.val);
- preorderTraversal(root.left);
- preorderTraversal(root.right);
- }
- 2.1 非递归遍历 - 基于栈 (前序遍历、深度优先遍历) ★★★☆☆(不推荐)
- public List preorderTraversalWithStack(TreeNode root) {
LinkedList output = new LinkedList<>(); // 用于回溯的栈 Stack stack = new Stack<>(); while (root != null || !stack.isEmpty()) { // 访问结点的数据,并且移动到左子结点,直到无左子结点 while (root != null) { output.add(root.val); stack.push(root); // 将当前节点 push 到栈中,方便后续回溯 root = root.left; // 遍历左子结点 } // 回溯,遍历右子结点 if (!stack.isEmpty()) { root = stack.pop().right; } } return output;}2.2非递归遍历 - 基于栈改进版(基于队列的栈模式)(执行时间较上者提升1倍) ★★★★☆public List preorderTraversalWithStack(TreeNode root) { LinkedList output = new LinkedList<>(); // 用于回溯的栈(基于链表实现,不用担心栈的扩容问题) LinkedList stack = new LinkedList<>(); while (root != null || !stack.isEmpty()) { // 访问结点的数据,并且移动到左子结点,直到无左子结点 while (root != null) { output.add(root.val); stack.add(root); // 将当前节点 add 到栈中,方便后续回溯 root = root.left; // 遍历左子结点 } // 回溯,遍历右子结点 if (!stack.isEmpty()) { root = stack.pollLast().right; } } return output;}3. 非递归遍历 - 基于队列 (层次遍历、广度优先遍历、O(n)) ★★★★☆public List levelorderTraversal(TreeNode root) { LinkedList output = new LinkedList<>(); if (root == null) { return output; } Queue queue = new LinkedList<>(); queue.add(root); // 遍历队列 while (!queue.isEmpty()) { // 从队列头部取出一个结点 root = queue.poll(); output.add(root.val); // 将左右子结点放入队列尾部 if (root.left != null) { queue.add(root.left); } if (root.right != null) { queue.add(root.right); } } return output;}4. Morris Traversal(莫里斯遍历、O(n)) ★★★★☆public List morrisTraversal(TreeNode root) { LinkedList output = new LinkedList<>(); TreeNode prev; TreeNode curr = root; while (curr != null) { // 向左子节点遍历 if (curr.left != null) { prev = curr.left; while (prev.right != null && prev.right != curr) { prev = prev.right; } // 右子节点的回溯指针绑定 if (prev.right == null) { prev.right = curr; curr = curr.left; } else { output.add(curr.val); prev.right = null; curr = curr.right; } // 向右子节点遍历 } else { output.add(curr.val); curr = curr.right; } } return output;}![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cDovL3d3dy55aWRpYW5rdC5jb20vc3RhdGljL2ltZ3Mvd3hnemguanBn?x-oss-process=image/format,png)QQ讨论群组:984370849 706564342 欢迎加入讨论
QQ讨论群组:984370849 706564342 欢迎加入讨论
想要深入学习的同学们可以加入QQ群讨论,有全套资源分享,经验探讨,没错,我们等着你,分享互相的故事!
前序遍历二叉树代码_二叉树遍历、二叉树深度、代码示例,一点课堂(多岸学院)...相关推荐
- qq空间代码查询_Mysql千万级大数据查询优化经验,一点课堂(多岸学院)
提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意) 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避 ...
- mysql cluster 读写分离_mysql数据库集群实现高可用读写分离_一点课堂(多岸学院)...
环境信息 操作系统:centos6.8 #mysql版本 mysql-community-client-5.7.25-1.el6.x86_64.rpm mysql-community-server-5 ...
- 广度优先遍历类似于二叉树的_深度优先遍历类似于二叉树的()
(1)[◆题库问题◆]:[单选] 深度优先遍历类似于二叉树的() A.先序遍历 B.中序遍历 C.后序遍历 D.层次遍历 [◆参考答案◆]:A ·ℳ°.·※°∴ ╰☆╮ .·ℳ°.·※°∴ ╰☆╮ . ...
- 冒泡排序c++代码_八大排序算法(解释+代码+结果+算法优化)
>>>欢迎点赞,收藏,转发! 评论区获取源代码与更多更全干货!<<< 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,不需要访问外存便能完成 ...
- 史上最烂代码_历史上最大的代码库
史上最烂代码 Here's a diagram of the biggest codebases in history, as measured by lines of code: 这是历史上最大的代 ...
- python测验5 函数和代码_测验5: 函数和代码复用 (第5周)-单选题
1.以下选项不是函数作用的是: A. 提 ...
- idea看更改过的代码_就是你把所有代码全写在一个类里的?
来源 | https://urlify.cn/6jQRN3 最近,在对已有项目进行扩展的时候,发现要改动的一个类它长900行,开放了近40个public接口,我流着泪把它给改完了. 为了防止这样的惨剧 ...
- java测试性能代码_关于性能:Java代码内部的基准测试
我最近一直在研究基准测试,我一直对记录程序数据等感兴趣.我想知道我们是否可以在程序中有效地实现自己的内存使用代码和实现自己的时间消耗代码.我知道如何检查代码运行所需的时间: public static ...
- vscode中怎样格式化js代码_如何在Visual Studio代码(VSCode)中格式化代码
回答(30) 2 years ago 对于那些想要自定义要格式化的JavaScript文件的人,可以使用 JSfiles 属性上的任何扩展名同样适用于HTML . { "beautify.o ...
- 一段堆栈溢出的代码_为什么堆栈溢出的代码片段会破坏您的项目
一段堆栈溢出的代码 Stack Overflow has been the saviour of many programmers, including me. Some of us have nev ...
最新文章
- postgresql----文本搜索类型和检索函数
- python 报错 TypeError: type ‘types.GenericAlias‘ is not an acceptable base type
- Flex命令行学习总结
- linux盘符改名字,Linux 下powerpath共享磁盘名称不一致处理方法
- 干掉了竞争对手的餐饮夫妻店,在等待自己的死亡
- springCloud学习1(集中式配置管理)
- Linux 下wifi 驱动开发(二)—— WiFi模块浅析
- sort和qsort函数
- 遍历列表python_Python 遍历List的三种方法
- hhvm php5.6,PHP_5.5_/_PHP5.6_/_PHP-NG_和_HHVM_哪个性能更好?
- 2018年测试状况调查
- 关于在项目中使用开源项目的疑惑,恳请大家给点意见!
- kafka及可视化工具offset explorer
- NR中关于RE、RB、CRB、PRB、VRB、REG、RBG、CCE等概念
- Mac 下载破译版本 secureFX 和 secureCRT
- Codevs3332 数列
- 马云周星驰天马行空对话:梦想需要新鲜感
- RTX3070深度学习环境配置
- Flask蓝本(Blueprint)
- Library projects cannot set applicationId问题解决
热门文章
- Win10+tensorflow:SSD调试问题:Unable to open table file ../checkpoints/ssd_300_vgg.ckpt
- 服务器上安装ffmpeg后报错及解决方案libavdevice.so.58: cannot open shared object file: No such file or directory
- Matlab中数据拟合函数lsqcurvefit的使用方法与常见问题
- 【编程】为什么不能直接对链表头head进行操作?
- 云炬随笔20210714(1)
- 量子计算机打破智子封锁,人类科技会被“智子”锁死?来看量子计算机如何打破技术壁垒...
- rabbitmq 延迟队列_框架系列|中间件RabbitMQ必看17道面试题
- 3DSlicer30:VS-Qt5VSaddin-qt4.8.7dev
- matlab中的分类器使用小结(SVM、KNN、RF、AdaBoost、Naive Bayes、DAC)
- 运动目标检测_单高斯背景建模