这里还是用到栈的思想,为了方便用了c++的一些内容,把出栈,进栈,读栈顶元素用一个个函数封装起来了,前面做了一些处理来使用这些函数。

前序非递归

思想:一直走左边,依次进栈。等左边为空的时候,返回,也就是读栈顶元素,读一个出一个,并让cur指向它的右边,把它的右边的结点当作根结点,再走一边上面的过程。

中序非递归

前序是在访问根结点时打印,中序是先访问左结点,所以在指向左结点时打印,也就是一直往左走依次入栈,走到头返回读栈顶元素并出栈时打印就行,然后cur等于当前栈顶元素的右子树,再把这个结点当根结点,再走一边这样的过程。

后序非递归


比较难想,要有一个指针last指向上一次操作完整遍历完的树的结点也就是这个结点是当前最底下的那个结点。
一直往左并入栈,走到头把top指上去,如果top的右边为空,打印并出栈,否则看右边是不是last如果是也打印出栈,
否则没有跑到右边最后一个,(如果跑到了,肯定是打印出栈,最后一个就变了)。cur就等于当前栈顶元素的右子树。

非递归实现二叉树(前序,中序,后序)c/c++实现相关推荐

  1. 二叉树的非递归遍历(前序中序后序非递归C语言)

    前两天做数据结构实验,要求用非递归算法遍历二叉树.只知道用栈来储存数据,具体算法还不太清楚.经过两天的搜索,看到网上很多种解法,很多解法都是用C++来写的算法,一直找不到用C语言写的算法,所以就总结了 ...

  2. 二叉树前序遍历,后序遍历

    求前序遍历 Description 给出一棵二叉树的中序和后序遍历,求它的前序遍历.(树结点用不同的大写字母表示,长度小于等于26.) Input 本问题有多组测试数据,每组测试数据有两行,每行都是由 ...

  3. 二叉树前序遍历与后序遍历

    二叉树 前序遍历 递归 借助栈进行排序 先将根节点压栈 栈不为空,如果存在根节点,先右后左. 弹栈打印.直至栈为空 package com.vitamin.tree;import java.util. ...

  4. 非递归实现二叉树的前序、中序、后序遍历

    目录 非递归实现二叉树的前序遍历 非递归实现二叉树的中序遍历 非递归实现二叉树的后序遍历 根据二叉树的前序和中序遍历结果还原二叉树 根据二叉树的中序和后序遍历结果还原二叉树 非递归遍历需要借助栈. 非 ...

  5. 非递归遍历二叉树 Java

    非递归实现二叉树的前序遍历```public List<Integer> preorderTraversal(TreeNode root) {List<Integer> ret ...

  6. 数据结构 5-3-2 二叉树前序中序后序遍历非递归实现

    一.前言 上一篇整理了几种遍历方式的递归实现,递归的实现方法都很简单,区区几句代码就可以实现,但是如果要用非递归的方法来实现就有些挑战了. 二.中序遍历 从中序遍历开始,其实非递归的方法就是把递归变成 ...

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

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

  8. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

  9. C++实现递归,非递归遍历二叉树(前序,中序,后序)

    初学二叉树那会儿,始终掌握不好二叉树的遍历方法,更认为非递归遍历晦涩难懂没有掌握的意义.实际上非递归的遍历方法很有用处,由于每次递归都需要将函数的信息入栈,当递归层数太深很容易就导致栈溢出,所以这个时 ...

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

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

最新文章

  1. java struts2 session mysql 内存不足_Java - 用户在线的数据库实现方法和内存实现方法...
  2. python学生管理系统教学_Python项目:学生信息管理系统(完整版)
  3. 软件开发的MVC构架
  4. figma设计_Figma与Adobe XD:我们如何选择下一个设计工具
  5. 人工智能第二课:认知服务和机器人框架探秘
  6. STM32----重温ADC测量电压值
  7. java异常中return_求大神!!!!java 异常处理中return的意思
  8. C/C++ 高质量编程--内存,二重指针,指针的高级使用解析 3
  9. 27 log4j2发送Syslog日志出现乱码错误
  10. bulk insert
  11. 【OTDR曲线工具箱】02 OTDR测量曲线查看
  12. Spring Initializr文档翻译及源码解读
  13. Visual Studio扩展开发(VS插件)
  14. 简述一下mysql与sqlyog的安装
  15. 微信扫描下载apk解决方案
  16. 手机使用小技巧,简单易懂 7610用蓝牙发送SIS文件方法(转)
  17. OpenJDK源码赏析之三:Java命令参数的读取处理流程
  18. Qt嵌入式开发的初步认识
  19. 2.Elasticsearch-增删改
  20. 浮云API 随机二次元图片接口开放文档 1w+数据

热门文章

  1. iOS开发之Masonry框架-使用方法须知
  2. 搭建springboot环境
  3. markdown-Macdown
  4. uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系
  5. UVA 10004 - Bicoloring
  6. lisp 揭 院长_HISLISPACSRIS EMR系统简介
  7. C语言oj中a b怎么做,【HDUOJ】第1002题 A + B Problem II 纯C语言解法
  8. 10个必知的网页设计术语计算机与网络,计算机网络专业毕业论文-网页设计与制作(23页)-原创力文档...
  9. python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍
  10. matlab多项式加法运算,matlab多项式运算与代数方程求解解析.ppt