void InOrder_NoRecursion(TreeNode *root)
{
  BiTreeStack s;

  // 还有未访问节点
  while(root != NULL || !s.empty())
  {
    // 当前节点没有访问
    if (root != NULL)
    {
      // 左孩子非空,该节点入栈,向左孩子移动
      if (root->left != NULL)
      {
        s.push(root);
        root = root->left;
      }
      // 左孩子已经遍历完,遍历该节点,转到右孩子
      else
      {
        VisitNode(root);
        root = root->right;
      }
    }
    // 一个节点的左子树完全遍历后,此节点出栈,访问然后转到右孩子
    else
    {
      root = s.top();
      s.pop();
      VisitNode(root);
      root = root->right;
    }
  }
}

转载于:https://www.cnblogs.com/lightex/archive/2011/04/08/2009688.html

二叉树非递归遍历算法(II)中序相关推荐

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

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

  2. 实现二叉树的三种非递归遍历算法

    [问题描述] 编写程序,实现二叉树的三种非递归遍历算法:先序非递归,中序非递归,后序非递归. [输入形式] 输入建树序列. [输出形式] 输出三种遍历序列. [样例输入] A B C # # # # ...

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

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

  4. 数据结构——二叉树的递归遍历算法与非递归遍历算法+层次遍历算法

    (文章篇幅有点长,二叉树的递归遍历算法不作详细分析,但是二叉树的非递归遍历算法和层次遍历算法都有非常详细的分析过程,记得往下翻哦!) 二叉树的递归遍历算法实现 我们首先用递归的方法先序遍历创建这样一棵 ...

  5. 数据结构(二十)二叉树的递归遍历算法

    一.二叉树的遍历的定义 1.二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问依次且仅被访问依次.树的结点之间不存在 ...

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

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

  7. C++版二叉树非递归遍历

    C++版二叉树非递归遍历 文章目录 C++版二叉树非递归遍历 一.二叉树前序遍历 二.二叉树中序遍历 三.二叉树后序遍历 一.二叉树前序遍历 /*** Definition for a binary ...

  8. 一种二叉树非递归遍历的简单写法

    一种二叉树非递归遍历的简单写法 目录 一种二叉树非递归遍历的简单写法 先序遍历 中序遍历 后序遍历 二叉树的遍历是数据结构中非常基础的一个知识点,也是面试手撕代码环节的一个常见题目.这个问题的递归写法 ...

  9. 二叉树非递归遍历(模版)

    读完本篇内容大约花费您7分钟时间 本文主要讲解二叉树非递归遍历,由于是非递归遍历,所以需要用到栈stack,我们如果仔细考虑递归遍历的代码,就能明白非递归种栈的应用. 由于几种遍历方式只是在处理中间节 ...

  10. Java版二叉树的前序遍历查找、中序遍历查找和后序遍历查找

    文章收藏的好句子:任何挫折,如果无法彻底击败你,那一定会使你更强. 目录 1.二叉树的节点查找 1.1 前序遍历查找 1.2 中序遍历查找 1.3 后序遍历查找 1.二叉树的节点查找  1.1 前序遍 ...

最新文章

  1. 用宏定义实现函数值互换
  2. java连接stk外部接口_SLWSTK无线开发工具上的外扩串口如何使用(虚拟串口/VCOM)...
  3. 在应用开发中,网易云音乐如何兼顾质量和效益
  4. U-GAT-IT中的一些细节以及变量含义
  5. 推荐系统经典模型 Wide Deep 论文剖析
  6. 产品特点概述-驰骋工作流
  7. 漫画:什么是A*寻路算法?
  8. 斯皮尔曼相关系数范围_斯皮尔曼相关系数
  9. QT_kvaser动态链接库配置
  10. iPhone中国移动收不到彩信,设置方法?
  11. Python 预测孩子身高
  12. php执行fastlane,Fastlane的使用及进阶
  13. 三次握手时,客户端发送的 SYN 报文为什么会被丢弃?
  14. 串口的空闲中断+DMA接收(附F4代码)
  15. css3的高级特效 2D
  16. 7-114 用if-else语句编程百分制成绩转换为五分制成绩
  17. java+OpenCV3 +百度OCR(或tesseract) 识别表格数据
  18. MPchart使用详解及详细属性(一)
  19. LeaRun.Framework━ .NET快速开发框架 ━ 工作流程组件介绍
  20. 三战上岸复旦工研院考研回忆(无干货)

热门文章

  1. this指向问题 php,js中的this指向问题
  2. java填空题 在非静态成员方法中_Java编程基础知识点汇总习题集--答案word版本
  3. 锚框 anchor box bounding box 动手学深度学习v2 pytorch
  4. 算法:翻转整数7. Reverse Integer
  5. 极客大学架构师训练营--编程的未来 面向对象 依赖倒置原则 -- 第二次作业
  6. 591. 标签验证器
  7. mysql--id主键列乱了之后,重新排序
  8. 区域增长 matlab,图像分割 区域增长
  9. python socket recvfrom 超时捕获_python-udp客户端超时机制
  10. lenovo L480 进入bios_如何通过bios关闭pxe启动 - 操作系统