二叉树(2)----中序遍历,递归和非递归实现
来源:互联网 发布:加盟网留言数据买卖 编辑:程序博客网 时间:2024/04/27 14:05
1、二叉树定义:
typedef struct BTreeNodeElement_t_ { void *data;} BTreeNodeElement_t;typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight;} BTreeNode_t;
2、中序遍历
定义:首先访问左子树,然后访问根节点,最后访问右子树
(1)递归实现
如果根节点为NULL,则返回
如果根节点不为NULL,则首先访问左子树,然后访问根节点,最后访问右子树
void InorderTraverse( BTreeNode_t *pRoot){ if( pRoot == NULL ) return ; InorderTraverse( pRoot->m_pLeft); Visiste( pRoot ); InorderTraverse( pRoot->m_pRight);}
(2)非递归实现
第一步:给定根节点pRoot,判断pRoot是否为空,如果不为空,然后进行第二步;如果为空,则进行第三步;
第二步:将pRoot入栈,将pRoot的左结点赋给pRoot,然后进行第一步;
第三步:判断栈是否为空;如果为空,则结束,如果不为空,则取出栈顶元素给pRoot,并出栈,访问pRoot,然后将pRoot的右结点赋给pRoot,然后进行第一步。
void InorderTraverse( BTreeNode_t *pRoot){ if( pRoot == NULL ) return ; stack < BTreeNode_t *> st; while( pRoot != NULL || !st.empty() ){ while( pRoot != NULL ){ st.push( pRoot); pRoot = pRoot->m_pLeft; } if( !st.empty() ){ pRoot = st.top(); st.pop(); Visit( pRoot ); pRoot = pRoot->m_pRight; } } return;}
0 0
- 二叉树(2)----中序遍历,递归和非递归实现
- 二叉树的遍历(非递归和递归实现)
- 二叉树遍历(递归和非递归实现)
- 二叉树及其遍历(递归和非递归实现)
- 二叉树遍历算法(递归实现先序中序和后续遍历)(非递归实现中序和先续)
- 递归实现和非递归实现中序遍历二叉树
- 中序遍历二叉树(递归 & 非递归)
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- 二叉树的前序,中序,后序遍历。用递归和非递归实现
- 二叉树的先序、中序、后续遍历的递归和非递归实现
- 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现
- 二叉树的遍历(前序,中序,后序,层序)--递归和非递归算法实现
- 二叉树的建树、遍历(先序、中序、后序、层次)(递归和非递归)--Java实现
- 二叉树遍历(先序、中序、后序、深度、广度)递归和非递归实现
- 二叉树的前序、中序、后序(递归、非递归)遍历java实现
- JAVA实现二叉树的前、中、后序遍历(递归与非递归)
- 【LintCode-67】二叉树的中序遍历(Java实现-递归算法/非递归算法)
- 二叉树的遍历:递归和非递归实现
- 经典Loading 动画赏析
- newLISP数据引用
- 做了一张壁纸,觉得挺不错,传播正能量,分享给大家
- TheGameOfLife
- split
- 二叉树(2)----中序遍历,递归和非递归实现
- Android学习笔记之AndroidManifest.xml文件解析
- 第16周项目4--为动态数组扩容
- 柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)
- c# 获取方法所在的命名空间 类名 方法名
- ffmpeg中的sws_scale算法性能测试
- 学习vi和vim编辑器(7):ex编辑器概述(2)
- BackBone 学习笔记 04 库函数Functions类
- Linux下的C编程实战【1】