二叉树的前序,中序,后续(非递归版本)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、前序
- 二、后序
- 三、中序
- 总结
前言
二叉树的非递归版本的前序中序后序在面试中也经常考,必须熟练掌握!
下面将会讲如何非递归打印二叉树的前中后序。
一、前序
思路:递归改非递归一般都要用到数据结构栈,当前节点出栈的时候打印,并有右节点先加入右节点,
后加入左节点,因为前序根左右,而栈是逆序,所以先入有节点。
void Print(TreeNode* root)
{//前序stack<TreeNode*> s = stack<TreeNode*>();//创建栈s.push(root);//头结点入栈入栈顺序有右压右,有左压左while (!s.empty()){TreeNode* cur = s.top();s.pop();cout << to_string(cur->val)+"" ;if (cur->right){s.push(cur->right);}if (cur->left){s.push(cur->left);}}
}
二、后序
思路:与前序不同,后序我们需要两个栈进行调换,第一个栈得出的结果顺序是根右左,因为栈逆序,我们将s1栈中的数据放入s2就得到了左右根,后续操作和前序相似。
后序stack<TreeNode*> s1 = stack<TreeNode*>();stack<TreeNode*> s2 = stack<TreeNode*>();s1.push(root);while (!s1.empty()){TreeNode* cur = s1.top();s1.pop();s2.push(cur);if (cur->left){s1.push(cur->left);}if (cur->right){s1.push(cur->right);}}while (!s2.empty()){TreeNode* cur = s2.top();s2.pop();cout << cur->val << endl;}
三、中序
代码如下:
中序stack<TreeNode*> t = stack<TreeNode*>();TreeNode* cur = root;while (!t.empty() || cur!=nullptr){if (cur!= nullptr){t.push(cur);cur = cur->left;}else{cur = t.top();t.pop();cout << cur->val << endl;cur = cur->right;}}
总结
二叉树的前序,中序,后续(非递归版本)相关推荐
- python数据结构二叉树的前序,中序,后续遍历与推导
根据先序中序求后续 其余同理,多画图就理解了
- 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...
- 二叉树的前序中序后序遍历
二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...
- 栈的亚特兰数与二叉树的前序中序遍历序列
栈的亚特兰数与二叉树的前序中序遍历 @(算法学习) 已经熟知的是二叉树的中序遍历和先序遍历可以唯一确定一棵树. 更有趣的知识点是,以先序遍历序列作为入栈序列,那么出栈序列恰为中序遍历.这样就把两种遍历 ...
- 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...
后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...
- 二叉树的前序中序后序三种遍历方式及递归算法介绍
二叉树三种遍历方式 二叉树的遍历是整个二叉树的核心,二叉树的几本操作都要依赖于遍历,对于二叉树的遍历,递归是最简单也最容易理解的,本文详细介绍了二叉树的三种遍历方法,并用递归来实现: 完整的可调试代码 ...
- C/C++面试题—重建二叉树【前序 + 中序- 重建二叉树 和 后序 + 中序 - 重建二叉树】
题目介绍 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{ ...
- 二叉树的前序中序后序遍历java代码实现
1.前序遍历概述 前序遍历(VLR) 是二叉树遍历的一种,也叫做先根遍历.先序遍历.前序周游,可记做根左右.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1 ...
- 二叉树的前序中序后序 递归与非递归解法
转自https://www.cnblogs.com/songwenjie/p/8955856.html 二叉树遍历原理 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点 ...
最新文章
- 停止NVIDIA的GPU进程
- 9款超赞的AI开源项目!| 本周Github精选
- 每日一皮:一个难以复现的 bug ...
- 利用模拟退火提高Kmeans的聚类精度
- 图像缩放算法_技术专栏|基于无人机LK光流算法的适用性及其优化方法探究
- Apache Superset从入门到放弃(基于python3.6.9)
- iphone照片删掉又出现_iPhone手机相册无法加锁应该怎么办?
- 特斯拉要退市!马斯克内部信:不受华尔街摆布;股价大涨10%
- pfSesne 使用IPv6与隧道代理
- python数据库定时更新脚本——(一)GitPython拉取代码
- STM32驱动步进电机测试
- 【原】制造垃圾邮件设想【未尝试】
- 网关统一配置解决跨域问题
- phalcon 自动加载_Phalcon自动加载(PHP自动加载),phalcon加载php_PHP教程
- 生成xslx文件,写入并读取
- python高效识别验证码 极简 dddd
- 腾讯T2亲自教你!java开发项目分工
- Navicat ORA-12737 ZHS16GBK
- 第二本第七章 Linux无人值守安装脚本kickstart
- Zcash中的加解密机制
热门文章
- dem生成等高线教程-dem提取等高线教程
- web概念、B/C、C/S区别与优缺点以及网络通信三要素:IP、端口号、传输地址
- Wind万得PythonAPI量化接口常用小工具——时序数据处理及工作日前推查询
- 用git clone命令从gitlab上拉取公司项目操作步骤
- 推荐一个利用 python 生成 pptx 分析报告的工具包:reportgen
- 【分页存储管理】将十六进制的虚拟地址0A5C、103C、4251转换成物理地址
- ubuntu安装软件失败无法安装其他软件的解决办法
- NFS 服务 lap1+lap2+mysql+nfs
- (附源码)springboot 新闻管理系统 毕业设计 211113
- 鼠标右键点击文件夹、bat文件、txt文档,指针出现假死转圈的解决方法(Adobe Acrobat右键邮件选项引起的win10假死)