二叉树的遍历
来源:互联网 发布:爱奇艺网络大电影分成 编辑:程序博客网 时间:2024/06/04 23:28
一:递归遍历
void Order(Binode* bt){if(bt==NULL)return;else{cout<<bt->data;//前序遍历Order(bt->lchild);cout<<bt->data;//中序遍历Order(bt->rchild);cout<<bt->data;//后序遍历}}
二:非递归遍历
前序遍历
void PreOrder(Binode* bt){//采用顺序栈,假定不会发生上溢int top=-1;Binode* S[100];while(bt!=NULL||top!=-1)//两条件都不成立说明遍历结束了{while(bt!=NULL){cout<<bt->data;S[++top]=bt;bt=bt->lchild;}if(top!=-1)//栈非空{bt=S[top--];bt=bt->rchild;}}}
中序遍历
void InOrder(Binode * bt){int top=-1;Binode* A[100];while(bt!=NULL||top!=-1){while(bt!=NULL){A[++top]=bt;bt=bt->lchild;}if(top!=-1){bt=S[top--];cout<<bt->data;bt=bt->rchild;}}}
后序遍历
struct element{Binode* ptr;int flag;}void PostOrder(Binode* bt){int top=-1;element A[100];while(bt!=NULL||top!=-1){while(bt!=NULL){top++;A[top].ptr=bt;A[top].flag=1;bt=bt->lchild;}while(top!=-1&&A[top].flag==2)//第二次出栈的结点才能访问{bt=A[top--].ptr;cout<<bt->data;}if(top!=-1){A[top].flag=2;bt=A[top].ptr->rchild;}}}
层序遍历
void LeverOrder(Binode *bt){Binode* Q[100];int front,rear;front=rear=-1;if(root==NULL)return;Q[++rear]=bt;while(front!=rear){Binode* q=Q[++front];cout<<q.data;if(q->lchild!=NULL)Q[++rear]=q->lchild;if(q->rchild!=NULL)Q[++rear]=q->rchild;}}
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- Wince unicode 处理
- 虚拟机下通过NAT方式静态IP如何连外网
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常【转载】
- 指针自加自减
- Java Session详解
- 二叉树的遍历
- POJ 1095 卡特兰数
- 关于rails 多个项目公用一个SQLITE数据库的方法
- Java泛型总结
- awk 函数写法
- Visual Studio环境变量
- HTML DOM对象
- 真实感渲染之Tone Mapping
- vim下接下Ctrl+S造成程序僵死