第10周项目实践 线索二叉树的建立及遍历
来源:互联网 发布:邻里中国网php面试题 编辑:程序博客网 时间:2024/05/18 01:25
typedef struct node
{
Elemtype date;
int ltag,rtag;
struct node lchild;
struct node rchild;
}TBTNode;
TBTNode *pre;//全局变量
void Thread(TBTNode *&p)//对二叉树进行中旭线索化
{
if(p!=NULL)
{
Thread(p->lchild);//左子树线索化
if(p->lchild==NULL)//左孩子不存在,进行前驱结点线索化
{
p->lchild=pre;//建立当前结点的前驱结点
p->ltag=1;//标记当前结点的前驱结点的线索
}
else
p->ltag=0;//p节点的左子树线索话
if(p->rchild==NULL)
{
pre->rchild=p;//对pre后续节点的线索话
pre->rchild=1;
}
else
pre->rtag=0;
pre=p;
Thread(p->rchild);//右子树线索化
}
}
TBTNode *CreateThread(TBTNode *b)//中序线索化二叉树
{
TBTNode *root;
root=(TBTNode *)malloc(sizeof(TBTNode));//建立头节点
root->ltag=0;
root->rtag=1;
root->rchild=b;
if(b!=NULL)
{
root->lchild=b;
pre=root;//pre节点是p的前驱结点
Thread(b);//中序遍历
pre->rchild=root;//最后加入指向头节点的线索
pre->rtag=1;
root->rchild=pre;//头节点右线索话
}
else
root->lchild=root;//b为空,指向其本身,否则root->lchild指向b
return root;
}//
void ThInorder(TBTNode *tb)//中序遍历线索树
{/*在中序遍历树时,开始节点是根节点的最左下节点,(该节点的做指针域为线索,即tag=1,
当找到开始节点后访问他,如果p的右指针是右线索,说明线索指向的就是后继节点,就找到后继节点并访问;
如果节点p的右指针不是右线索,他指向的是右子树,就转向右子树。*/
TBTNode *p=tb->lchild;
while(p!=tb)
{
while(p->lchild==0)
p=p->lchild;
cout<<p->date;
while(p->rtag==1&&p->rchild!=tb)
{
p=p->rchild;
cout<<p->date;
}
p=p->rchild;
}
}
{
Elemtype date;
int ltag,rtag;
struct node lchild;
struct node rchild;
}TBTNode;
TBTNode *pre;//全局变量
void Thread(TBTNode *&p)//对二叉树进行中旭线索化
{
if(p!=NULL)
{
Thread(p->lchild);//左子树线索化
if(p->lchild==NULL)//左孩子不存在,进行前驱结点线索化
{
p->lchild=pre;//建立当前结点的前驱结点
p->ltag=1;//标记当前结点的前驱结点的线索
}
else
p->ltag=0;//p节点的左子树线索话
if(p->rchild==NULL)
{
pre->rchild=p;//对pre后续节点的线索话
pre->rchild=1;
}
else
pre->rtag=0;
pre=p;
Thread(p->rchild);//右子树线索化
}
}
TBTNode *CreateThread(TBTNode *b)//中序线索化二叉树
{
TBTNode *root;
root=(TBTNode *)malloc(sizeof(TBTNode));//建立头节点
root->ltag=0;
root->rtag=1;
root->rchild=b;
if(b!=NULL)
{
root->lchild=b;
pre=root;//pre节点是p的前驱结点
Thread(b);//中序遍历
pre->rchild=root;//最后加入指向头节点的线索
pre->rtag=1;
root->rchild=pre;//头节点右线索话
}
else
root->lchild=root;//b为空,指向其本身,否则root->lchild指向b
return root;
}//
void ThInorder(TBTNode *tb)//中序遍历线索树
{/*在中序遍历树时,开始节点是根节点的最左下节点,(该节点的做指针域为线索,即tag=1,
当找到开始节点后访问他,如果p的右指针是右线索,说明线索指向的就是后继节点,就找到后继节点并访问;
如果节点p的右指针不是右线索,他指向的是右子树,就转向右子树。*/
TBTNode *p=tb->lchild;
while(p!=tb)
{
while(p->lchild==0)
p=p->lchild;
cout<<p->date;
while(p->rtag==1&&p->rchild!=tb)
{
p=p->rchild;
cout<<p->date;
}
p=p->rchild;
}
}
阅读全文
0 0
- 第10周项目实践 线索二叉树的建立及遍历
- 线索二叉树的建立及遍历
- 二叉树的建立,遍历,线索化
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树的建立和遍历
- 线索化二叉树的建立,遍历
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 线索二叉树的生成及遍历
- 线索二叉树的生成及遍历
- 线索二叉树模型的建立与遍历
- 线索二叉树的建立与遍历C/C++
- 线索二叉树的建立和中序遍历
- 线索二叉树的建立及其遍历访问操作
- 第10周实践项目2-二叉树遍历的递归算法
- 第10周上机实践项目2—— 二叉树遍历的递归算法
- 前端学习第六弹:制作一个简易导航
- [JZOJ2393]【ZJOI2011】营救皮卡丘
- shiro cookie
- tensorflow 学习笔记之 变量的一些操作
- HDU
- 第10周项目实践 线索二叉树的建立及遍历
- Hbase命令
- SpringMVC(1)----@RequestParam和@PathVariable用法小结
- jqwidgets 国际化- 中文 jqxGrid 中文语言包 gridlocalization
- Android知识点(一)
- Spring cloud系列七 为@Feign中集成的Ribbon进行个性化配置
- Codeforces Round #440 B. Maximum of Maximums of Minimums-【思维】
- 整合webview的一些资料
- python网络爬虫系列教程——python中requests库应用全解