生成二叉树 非递归,递归遍历二叉树
来源:互联网 发布:知乎的通知怎么删除 编辑:程序博客网 时间:2024/05/17 01:53
#include<stdlib.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *lchild ,*rchild;
}btree,*btreelink;
void bitree(btreelink *b);
void preorder(btreelink b);
void inorder(btreelink b);
void postorder(btreelink b);
void unpreorder(btreelink b);
void uninorder(btreelink b);
void unpostorder(btreelink b);
void bitree(btreelink *b)//利用先序遍历的方式生成树
{
int c;
scanf("%d",&c);
if(c==-1)
*b=NULL;
else
{
(*b)=(btreelink)malloc(sizeof(btree));
(*b)->data=c;
bitree(&(*b)->lchild);
bitree(&(*b)->rchild);
}
}
void unpreorder(btreelink b)//非递归法,先序遍历二叉树
{
btreelink a[20];
int top=0;
btreelink p;
if(b)
{
top++;
a[top]=b;
}
while(top>0)
{
p=a[top];
top--;
printf("%d ,",p->data);
if(p->rchild)
{
top++;
a[top]=p->rchild;
}
if(p->lchild)
{
top++;
a[top]=p->lchild;
}
}
}
void preorder(btreelink b)//递归法,先序遍历二叉树
{
if(b!=NULL)
{
printf("%d ,",b->data);
preorder(b->lchild);
preorder(b->rchild);
}
}
void uninorder(btreelink b)//非递归法,中序遍历二叉树
{
btreelink a[20],p=b;
int top=0;
while(top>0||p)
{
while(p)
{
top++;
a[top]=p;
p=p->lchild;
}
if(top>0)
{
p=a[top];
top--;
printf("%d ,", p->data);
p=p->rchild;
}
}
}
void inorder(btreelink b)//递归法,中序遍历二叉树
{
if(b!=NULL)
{
inorder(b->lchild);
printf("%d ,",b->data);
inorder(b->rchild);
}
}
void unpostorder(btreelink b)//非递归法,后序遍历二叉树
{
btreelink cur; //当前结点
btreelink pre=NULL; //前一次访问的结点
btreelink a[20];
int top=0;
top++;
a[top]=b;
while(top>0)
{
cur=a[top];
if((cur->lchild==NULL&&cur->rchild==NULL)||(pre!=NULL&&(pre==cur->lchild||pre==cur->rchild)))//没有左右子树,后者左右子树被访问过则输出,排除\根结点
{
printf("%d ,",cur->data);
top--;
pre=cur;
}
else
{
if(cur->rchild!=NULL)
{
top++;
a[top]=cur->rchild;
}
if(cur->lchild!=NULL)
{
top++;
a[top]=cur->lchild;
}
}
}
}
void postorder(btreelink b)//递归法,后序遍历二叉树
{
if(b!=NULL)
{
postorder(b->lchild);
postorder(b->rchild);
printf("%d ,",b->data);
}
}
- 生成二叉树 非递归,递归遍历二叉树
- 非递归遍历二叉树
- 二叉树遍历非递归
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树非递归遍历
- 非递归遍历二叉树
- 二叉树非递归遍历
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树遍历--非递归
- 二叉树非递归遍历
- 非递归遍历二叉树
- 二叉树非递归遍历
- gethostbyname_r failed
- Linux中突破线程数的限制
- 下载编译goldfish(看成是一个模拟的arm芯片的linux内核)
- Android开发项目经验
- push-stream模块的安装,配置
- 生成二叉树 非递归,递归遍历二叉树
- java环境中配置SSL双向认证
- android基础---自定义属性值的format
- Nginx消息推送框架的一种实现
- 第九周 算个人所得税和税后收入
- 0-1背包 动态规划原理与c代码
- C++ 获取当前按钮句柄,并将按钮隐藏
- 设计模式 reactor和proactor(转)
- 聚集索引和非聚集索引