提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、前序
  • 二、后序
  • 三、中序
  • 总结

前言

二叉树的非递归版本的前序中序后序在面试中也经常考,必须熟练掌握!
下面将会讲如何非递归打印二叉树的前中后序。

一、前序

思路:递归改非递归一般都要用到数据结构栈,当前节点出栈的时候打印,并有右节点先加入右节点,
后加入左节点,因为前序根左右,而栈是逆序,所以先入有节点。

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;}}

总结

二叉树的前序,中序,后续(非递归版本)相关推荐

  1. python数据结构二叉树的前序,中序,后续遍历与推导

    根据先序中序求后续 其余同理,多画图就理解了

  2. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

  3. 二叉树的前序中序后序遍历

    二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...

  4. 栈的亚特兰数与二叉树的前序中序遍历序列

    栈的亚特兰数与二叉树的前序中序遍历 @(算法学习) 已经熟知的是二叉树的中序遍历和先序遍历可以唯一确定一棵树. 更有趣的知识点是,以先序遍历序列作为入栈序列,那么出栈序列恰为中序遍历.这样就把两种遍历 ...

  5. 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...

    后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...

  6. 二叉树的前序中序后序三种遍历方式及递归算法介绍

    二叉树三种遍历方式 二叉树的遍历是整个二叉树的核心,二叉树的几本操作都要依赖于遍历,对于二叉树的遍历,递归是最简单也最容易理解的,本文详细介绍了二叉树的三种遍历方法,并用递归来实现: 完整的可调试代码 ...

  7. C/C++面试题—重建二叉树【前序 + 中序- 重建二叉树 和 后序 + 中序 - 重建二叉树】

    题目介绍 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{ ...

  8. 二叉树的前序中序后序遍历java代码实现

    1.前序遍历概述 前序遍历(VLR) 是二叉树遍历的一种,也叫做先根遍历.先序遍历.前序周游,可记做根左右.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1 ...

  9. 二叉树的前序中序后序 递归与非递归解法

    转自https://www.cnblogs.com/songwenjie/p/8955856.html 二叉树遍历原理 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点 ...

最新文章

  1. 停止NVIDIA的GPU进程
  2. 9款超赞的AI开源项目!| 本周Github精选
  3. 每日一皮:一个难以复现的 bug ...
  4. 利用模拟退火提高Kmeans的聚类精度
  5. 图像缩放算法_技术专栏|基于无人机LK光流算法的适用性及其优化方法探究
  6. Apache Superset从入门到放弃(基于python3.6.9)
  7. iphone照片删掉又出现_iPhone手机相册无法加锁应该怎么办?
  8. 特斯拉要退市!马斯克内部信:不受华尔街摆布;股价大涨10%
  9. pfSesne 使用IPv6与隧道代理
  10. python数据库定时更新脚本——(一)GitPython拉取代码
  11. STM32驱动步进电机测试
  12. 【原】制造垃圾邮件设想【未尝试】
  13. 网关统一配置解决跨域问题
  14. phalcon 自动加载_Phalcon自动加载(PHP自动加载),phalcon加载php_PHP教程
  15. 生成xslx文件,写入并读取
  16. python高效识别验证码 极简 dddd
  17. 腾讯T2亲自教你!java开发项目分工
  18. Navicat ORA-12737 ZHS16GBK
  19. 第二本第七章 Linux无人值守安装脚本kickstart
  20. Zcash中的加解密机制

热门文章

  1. dem生成等高线教程-dem提取等高线教程
  2. web概念、B/C、C/S区别与优缺点以及网络通信三要素:IP、端口号、传输地址
  3. Wind万得PythonAPI量化接口常用小工具——时序数据处理及工作日前推查询
  4. 用git clone命令从gitlab上拉取公司项目操作步骤
  5. 推荐一个利用 python 生成 pptx 分析报告的工具包:reportgen
  6. 【分页存储管理】将十六进制的虚拟地址0A5C、103C、4251转换成物理地址
  7. ubuntu安装软件失败无法安装其他软件的解决办法
  8. NFS 服务 lap1+lap2+mysql+nfs
  9. (附源码)springboot 新闻管理系统 毕业设计 211113
  10. 鼠标右键点击文件夹、bat文件、txt文档,指针出现假死转圈的解决方法(Adobe Acrobat右键邮件选项引起的win10假死)