C语言递归实现线索二叉树
本文实例为大家分享了C语言递归实现线索二叉树的具体代码,供大家参考,具体内容如下
描述:将二叉树中结点的空左孩子指针域指向前驱结点,将空的右孩子指针域指向后继结点。
code:
#pragmawarning(disable:4996) #include#include typedefstructTreeNode{ chardata; structTreeNode*lchild,*rchild; intltag,rtag; }Tree,*BTree; BTreeBuild_Tree(void){ BTreeT; charch; scanf("%c",&ch); if(ch=='#'){ T=NULL; } else{ T=(BTree)malloc(sizeof(Tree)); T->data=ch; T->ltag=0; T->rtag=0; T->lchild=Build_Tree(); T->rchild=Build_Tree(); } returnT; } //先序线索化 voidPre_Thread(BTreecur,BTree*pre){ if(cur&&cur->ltag==0){ printf("%c",cur->data); if(cur->lchild==NULL){ cur->lchild=*pre; (*pre)->ltag=1; cur->ltag=1; } if(cur->rchild==NULL){ cur->rtag=1; } if(*pre&&(*pre)->rtag==1){ (*pre)->rchild=cur; } *pre=cur; Pre_Thread(cur->lchild,pre); Pre_Thread(cur->rchild,pre); } } //中序线索化 voidIn_Thread(BTreecur,BTree*pre){ if(cur){ In_Thread(cur->lchild,pre); printf("%c",cur->data); if(cur->lchild==NULL){ cur->lchild=*pre; cur->ltag=1; } if(cur->rtag==NULL){ cur->rtag=1; } if(*pre&&(*pre)->rtag==1){ (*pre)->rchild=cur; } *pre=cur; In_Thread(cur->rchild,pre); } } //后序线索化 voidPost_Thread(BTreecur,BTree*pre){ if(cur){ Post_Thread(cur->lchild,pre); Post_Thread(cur->rchild,pre); printf("%c",cur->data); if(cur->lchild==NULL){ cur->lchild=*pre; cur->ltag=1; } if(cur->rchild==NULL){ cur->rtag=1; } if(*pre&&(*pre)->rtag==1){ (*pre)->rchild=cur; } *pre=cur; } } intmain(void){ BTreeT,p=NULL; T=Build_Tree(); Pre_Thread(T,&p); //In_Thread(T,&p); //Post_Thread(T,&p); return0; }
跑时分别运行前序、中序、后序线索化。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。