一、引言
二叉树的遍历常见的方法有先序遍历、中序遍历、后序遍历和层次遍历等,本文给出了C语言版本的中序遍历二叉树的非递归算法和递归算法。
中序遍历的原理很简单,也就是把树根的访问放在中间。访问结点的次序是:“左—>根—>右”,也就是首先访问左子树,之后访问树根,最后访问右子树。对于左、右子树而言,其访问的次序依然是“左—>根—>右”。
不要小看这里的次序发生的改变,其实具体的实现方式比先序遍历也要麻烦了。
二叉树的中序遍历与先序遍历一样,都可以通过递归算法实现,也可以通过非递归算法实现。
二、二叉树的中序遍历详细演示过程
1、假设二叉树(左右子树全)如下图所示:

2、假设二叉树(没有右子树)如下图所示:

3、假设二叉树(没有左子树)如下图所示:

4、对于稍微复杂一点的二叉树,如下图所示:

其中序遍历过程演示如下(“左—>根—>右”)






三、先序遍历二叉树的代码:
1、算法具体实现思路
从树根开始依次向左走,见到一个结点就入栈一个,直到踏空,然后栈顶结点弹栈,弹栈结点立即访问,之后沿着该结点向右走一步,然后重复前面的动作一路向左。
2、递归算法

void  InorderSearch( BiTree *T )
{if( T != NULL ){InorderSearch( T->Lchild );
#ifdef CHARprintf( "%5c\n", T->data );
#elseprintf( "%5d\n", T->data );
#endif  InorderSearch( T->Rchild );}
}

2、非递归算法

void InorderSearch( BiTree *T )
{BiTree *stack[MAX_NODE], *p = T;int top = 0;if (T==NULL) {printf( "二叉树为空." );return;}while( p != NULL || top > 0 ){if( p != NULL )//遇到非空结点即压栈,之后一路向左 {stack[top++] = p; p = p->Lchild;}else//遇到空节点则弹栈,访问,向右一步走 {p = stack[--top];
#ifdef CHARprintf( "%5c\n", p->data );
#elseprintf( "%5d\n", p->data );
#endif p = p->Rchild;} }
}

补充:至此,已经完成了二叉树的创建的三种不同方法、二叉树遍历的两种方法。对于中序遍历,其实还有很多方法,但是笔者比较喜欢上述方法,两个字“简单”。

二叉树遍历之中序遍历算法(非递归、递归)入门详解相关推荐

  1. 二叉树遍历之中序遍历

    二叉树遍历之中序遍历 二叉树的中序遍历与深度优先搜索很类似,对于深度优先算法,我们使用栈(Stack),广度优先搜索使用队列(Queue).二叉树的中序遍历遵循三个步骤 遍历左树 访问根节点 遍历右数 ...

  2. 二叉树遍历之后序遍历(非递归、递归)入门详解

    一.引言 二叉树的遍历常见的方法有先序遍历.中序遍历.后序遍历和层次遍历等,本文给出了C语言版本的后序遍历二叉树的非递归算法和递归算法. 后序遍历不如先序遍历简单,是相对最复杂的一种遍历方法.访问结点 ...

  3. 计算二叉树深度算法(递归、非递归)入门详解

    一.引言 二叉树在应用时,经常需要知道二叉树的深度.二叉树的深度就是二叉树的层数,即从树根算起,到最底下一层的层数是多少,即二叉树中结点的最大层次值. 本文给出了计算二叉树深度的算法,包括递归算法和非 ...

  4. 二叉树的中序遍历 递归与非递归

    94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回它的 中序 遍历. 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [ ...

  5. 二叉树的先序遍历(非递归)

    虽然递归简单理解,但是用递归内存开销大,耗时长,性能往往不如非递归方式 所以这里通过栈,用非递归方法实现二叉树的先序遍历 二叉树的存储结构定义: typedef struct node{int dat ...

  6. 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)

    二叉树的中序遍历非递归方法(算法导论第三版12.1-3) 1⃣️用栈实现 template<typename T> void inorder_tree_walk_non_recursion ...

  7. 二叉树的后序遍历(递归和非递归)

    二叉树的后序遍历 后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历.后序周游,记为左右根,简记:左右根. 步骤(非递归): ⼆叉树的后序遍历顺序是左-右-根.在这里仍然采用棧来进行辅助,具体步骤如 ...

  8. 非递归遍历二叉树(后序遍历)

    非递归遍历二叉树(后序遍历) 在二叉树的遍历中,分为递归遍历与非递归遍历.非递归遍历的执行效率较高,时间复杂度小,因此采用非递归遍历有利于提高代码运行效率. //后序遍历非递归实现 void Post ...

  9. 数据结构与算法之二叉树的先序遍历,中序遍历,后序遍历

    数据结构与算法之二叉树的先序遍历,中序遍历,后移遍历 目录 实现二叉树的先序,中序,后序遍历,包括递归方式和非递归方式 在二叉树中找到一个节点的后继节点 1. 实现二叉树的先序,中序,后序遍历,包括递 ...

最新文章

  1. 动态路由协议RIP的基本原理与配置
  2. Windoes 远程桌面 对windows 传送大文件(镜像等)
  3. 15+ tar command usages with examples – Unix/Linux--reference
  4. 如何在ashx页面获取Session值
  5. nettry 入站事件如何传递到下一个handler
  6. AJax错误WebForm1没有定义的javascript错误的解决方法
  7. yum grouplist 安装gnome桌面环境
  8. 让Windows 7安装更快速.
  9. 兄弟HL-1118加粉清零
  10. 408考研经验分享(待更
  11. python操作微信电脑版_python操作微信客户端:WechatPCAPI库实现自动化回复
  12. 抖音极速版/快手极速版自动浏览
  13. Mac securecrt 破解版安装
  14. VScode输入感叹号无法生成HTML模板
  15. 一文详解车道线检测技术分析
  16. 【论文排版术】学习笔记1
  17. Linux系统load average异常值处理的trick
  18. 使用GameMaker中用于碰撞检测的脚本小记
  19. python读取word文档并做简单的批量文档筛选
  20. python epub 精品_如何利用Python打包HTML页面为epub?

热门文章

  1. 20162316刘诚昊 17年10月9日测验“排序课堂测试”
  2. Apriori算法详解及手写案例
  3. 接商城类私活就靠他了,前后端都有
  4. 【路径规划-TSP问题】基于蚁群算法求解旅行商问题含Matlab代码
  5. 数据结构—二叉树线索化(线索化的先序、中序、后序遍历)
  6. QuaggaJS在给定图像中定位条形码的工作原理
  7. 混合云网络怎么组网搭建?
  8. Java驻场开发是什么?有什么好处
  9. 如192.168.1.10/27 IP斜杠后面的27是什么意思?
  10. 五洲御瓷精彩绽放2020第八届特色酒店案例分享论坛暨十周年庆典