二叉树遍历之中序遍历(源代码)
来源:互联网 发布:hpv报告单怎么看数据 编辑:程序博客网 时间:2024/06/05 05:10
二叉树的中序遍历
- 要点:
1.中序遍历左子树
2.访问根节点
3.中序遍历右子树 实例: 如图:中序遍历结果:DBEAFC
中序遍历的时间复杂度为:O(n)。
如果一棵二叉排序树的节点值是数值,中序遍历的结果为升序排列的数组。可以利用该性质检测一棵树是否为二叉排序数。
已知前序遍历和后序遍历,不能确定唯一的中序遍历
计算中序遍历拥有比较简单直观的投影法,如图
3.typedef struct TreeNode { int data; struct TreeNode *left; struct TreeNode *right; struct TreeNode *parent;} TreeNode;void middle_order(TreeNode *Node) { if(Node != NULL) { middle_order(Node->left); printf("%d ", Node->data); middle_order(Node->right); }}
4.非递归实现:
根据中序遍历的顺序,对于任一结点,优先访问其左孩子,而左孩子结点又可以看做一根结点,然后继续访问其左孩子结点,直到遇到左孩子结点为空的结点才进行访问,然后按相同的规则访问其右子树。因此其处理过程如下:对于任一结点P,
1)若其左孩子不为空,则将P入栈并将P的左孩子置为当前的P,然后对当前结点P再进行相同的处理;
2)若其左孩子为空,则取栈顶元素并进行出栈操作,访问该栈顶结点,然后将当前的P置为栈顶结点的右孩子;
3)直到P为NULL并且栈为空则遍历结束
void inOrder2(BinTree *root) //非递归中序遍历{ stack<BinTree*> s; BinTree *p=root; while(p!=NULL||!s.empty()) { while(p!=NULL) { s.push(p); p=p->lchild; } if(!s.empty()) { p=s.top(); cout<<p->data<<" "; s.pop(); p=p->rchild; } } }
1 0
- 二叉树遍历之中序遍历(源代码)
- 二叉树之中序遍历
- 数据结构二叉树遍历之中序遍历
- 二叉树非递归遍历之中序遍历
- 二叉树之中序遍历(递归和非递归两种遍历)
- java二叉树非递归之中序遍历
- java二叉树非递归之中序遍历
- 二叉树的先序遍历(源代码)
- 二叉树层次遍历源代码
- 二叉树之中序遍历的递归和迭代实现
- 菜鸟成长之中序遍历
- 二叉树遍历源代码(递归版 和 堆栈版)
- 二叉树遍历(Java)---前序遍历,中序遍历,后序遍历
- 二叉树的遍历(1)--先序遍历,中序遍历,后序遍历
- 二叉树的遍历(前序遍历、中序遍历、后序遍历)
- 二叉树的遍历代码(先序遍历,中序遍历,后序遍历)
- 二叉树遍历(前序遍历,中序遍历,后序遍历)
- 【数据结构与算法】二叉树的遍历(递归遍历、非递归遍历、层序遍历)
- 代码的坏味道(2)—重构改善代码的既有设计
- AutoHotkey如何循环读取ini文件里所有section的所有key值
- Cocos Studio 发布手机游戏踩坑之路【先留坑f】
- ITEye博客已搬至CSDN
- ubuntu 11.04上安装matlab r2011b
- 二叉树遍历之中序遍历(源代码)
- 关于相机标定意义和原理的个人总结
- Android获取WIFI状态下的IP地址以及MAC地址
- CorelDRAW中的背景模糊效果该怎么进行制作
- UDP协议的数据传输
- Java实现-二叉树定义树结点及创建
- 推荐几款优秀的Android Studio插件
- 递归求二叉树的深度
- CMake使用总结