“ Ctrl AC!一起 AC!”
定义:
?
存储结构:
typedef char datatype;
typedef struct node{
datatype data;
int ltag,rtag;
struct node *lchild,*rchild;
}binthrnode;
typedef binthrnode* binthrtree;
创建中序穿线二叉树:
先建立一颗一般的二叉树,然后对其进行中序线索化。
binthrtree pre=NULL;
binthrtree createbintree(){
char ch;
binthrtree t;
if((ch=getchar())=='#') t=NULL;
else{
t=(binthrnode*)malloc(sizeof(binthrnode));
t->data=ch;
t->lchild=createbintree();
t->rchild=createbintree();
}
return t;
}
void inthreading(binthrtree *p){
if(*p){
inthreading(&((*p)->lchild));
(*p)->ltag=(*p)->lchild?0:1;
(*p)->rtag=(*p)->rchild?0:1;
if(pre){
if(pre->rtag==1) pre->rchild=*p;
if(*p->ltag==1) *p->lchild=pre;
}
pre=*p;
inthreading(&((*p)->rchild));
}
}
void createthrtree(binthrtree *p){
*p=createbintree();
inthreading(p);
}
int main(){
binthrtree root;
createthrtree(&root);
}
中序遍历中序穿线二叉树:
binthrtree nextnode(binthrtree p){
binthrtree q;
if(p->rtag==1) return p->rchild;
else{
q=p->rchild;
while(q->ltag==0) q=q->lchild;
return q;
}
}
void inthrtree(binthrtree p){
if(p){
while(p->ltag==0) p=p->child;
do{
printf("%c ",p->data);
p=nextnode(p);
}while(p);
}
}
感谢阅读!!!
“ Ctrl AC!一起 AC!”
|