(面试前复习)二叉树遍历 递归与非递归实现
来源:互联网 发布:shopex1000 源码 编辑:程序博客网 时间:2024/05/24 01:44
二叉树的遍历方式有前序遍历,中序遍历和后序遍历这三种方式,我们现在就定义一个数据结构树,如下:
struct Tree{
Tree * lchild;
Tree * rchild;
Element data;//数据域
}
为了实现树的非递归遍历,这里我们需要增加一个数据结构站stack,其实,递归的实现是用系统自带的栈来实现的。
对应的前序遍历如下:
void preTraverse(Tree * t){
if(t!=null){
print(t->data);
preTraverse(t->lchild);
preTraverse(t->rchild);
}
}
非递归形式的实现如下:
void preTraverse(Tree* t){
if(t==null)
return ;
Stack s ;
while(t!=null){
s.push(t);
print(t->data);
t= t->lchild;
}
while(!s.empty()){
Tree * temp = s.top()->rchild;
s.pop();
while(temp!=null){
s.push(temp);
print(temp->data);
temp= temp->lchild;
}
;
}
}
中序遍历的递归形式如下:
void inOrderTraverse(Tree * t){
if(t!=null){
inOrderTraverse(t->lchild);
print(t->data);
inOrderTraverse(t->rchild);
}
}
中序遍历对应的非递归形式如下:
void inOrderTraverse(Tree * t){
if(t==null)
return;
Stack s;
s.push(t);
Tree curr = t->lchild;
while(curr!=null || !s.empty()){
while(curr!=null){
s.push(t);
curr = curr->lchild;
}
curr = s.top();
s.pop();
print(cur->data);
curr = curr->rchild;
}
}
后序遍历对应的递归程序如下:
void postOrderTraverse(Tree * t){
if(t!=null){
postOrderTraverse(t->lchild);
postOrderTraverse(t->rchild);
print(t->data);
}
}
后序遍历对应的非递归程序如下:
void postOrder(Tree * t){
if(t == null)
return;
Stack s;
s.push(t);
Tree curr = t-lchild;
while(!s.empty()){
while(curr ! = null){
s.push(curr);
curr = curr - > lchild;
}
curr = s.top();
if(curr->rchild == nulll ||curr->rchild == previsited ){
print(curr->data);
prvisited = curr;
s.pop();
curr = null; //
}else{
curr = curr->right;
}
}
}
- (面试前复习)二叉树遍历 递归与非递归实现
- 二叉树的深度与广度遍历及前序遍历递归非递归实现
- 二叉树的前序遍历的递归实现与非递归实现
- 【二叉树遍历算法】——前/中/后序递归与非递归的实现
- JAVA实现二叉树的前、中、后序遍历(递归与非递归)
- 二叉树非递归遍历复习代码实现
- Java实现二叉树的递归与非递归遍历
- 二叉树的递归遍历与非递归算法实现
- 二叉树的递归遍历与非递归算法实现
- 递归与非递归实现二叉树的遍历
- 二叉树遍历递归与非递归实现
- 二叉树的递归与非递归遍历实现
- 二叉树遍历的递归与非递归实现
- 二叉树递归与非递归遍历实现
- 二叉树遍历(递归与非递归实现)
- 【C++】二叉树遍历--递归与非递归实现
- 二叉树遍历的递归与非递归实现
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归) 层次遍历
- 如何修改远程登录3389端口
- 探讨start调用纯dos命令
- CodeIgniter PHP Fatal error: Class 'Controller' not found
- 使IIS6运行在64位系统上
- 参数估计与置信区间
- (面试前复习)二叉树遍历 递归与非递归实现
- 关于粗大的纹理
- Oracle中数值的计算
- iPhone和iPad开发中的图标设置
- hadoop实战-初级部分
- Android 手机端与pc服务器之Socket通信
- 网站分析基础概念之访问频数
- delphi中玩转keybd_event
- Android Make脚本的简记