可是.好象意思是 能建.它说"我们先以中序为例"
让我再找找资料去...
[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
不好意思.今天才发表.由于前几天写的有漏洞.今天才有时间修改.
代码如下:
#include <stdio.h>
#include <stdlib.h>
struct btnode
{
int data,rflag;
struct btnode *lchild,*rchild;
};
struct btnode *creatbt(struct btnode *bt,int k)
{
struct btnode *p,*t;
int x;
scanf("%d",&x);
if(x!=0)
{
p=(struct btnode *)malloc(sizeof(struct btnode));
p->data=x;p->rflag=0;
p->lchild=p->rchild=NULL;
if(k==0) t=bt=p;
if(k==1) bt->lchild=p;
if(k==2) bt->rchild=p;
creatbt(p,1);
creatbt(p,2);
}
return(t);
}
void xiansuo(struct btnode *bt)
{
struct btnode *s[20],*p,*k=NULL;
int top=-1;
if(bt!=NULL)
{
top++; s[top]=bt;
while(top>=0)
{
p=s[top];top--;
if(k) k->rflag=1,k->rchild=p,k=NULL;
if(p->rchild==NULL) k=p;
if(p->rchild!=NULL) top++,s[top]=p->rchild;
if(p->lchild!=NULL) top++,s[top]=p->lchild;
}
p->rflag=-1;
}
return;
}
void bianli(struct btnode *t)
{
while(t->rflag!=-1)
{
printf("%d ",t->data);
if((t->rflag ==0) && (t->lchild!=NULL))
t=t->lchild;
else t=t->rchild;
}
printf("%d",t->data);
return;
}
main()
{
struct btnode *bt=NULL;
bt=creatbt(bt,0);
xiansuo(bt);
bianli(bt);
getch();
}
由于我没有在网上搜索到相关先序的算法,所以 这完全是自己的算法 如果有不足 请指出
我只定义了一个右标记.也就是说.左面我没有做处理..所以我称之为 二叉树先序半线索化
当然..它和普通的线索化的方便性没有什么区别..查找也是很方便的..我没有写查找函数.
至于相关的算法和线索化的理论 我有时间会在数据结构发表!
所以你就理解的看看吧...