//算法5.7以结点p为根的子树中序线索化
#include <iostream>
using namespace std;
//二叉树的二叉线索类型
typedef char Telemtype;
typedef struct BiThrNode{
Telemtype data;
struct BiThrNode *lchild,*rchild;
int LTag,RTag;
}BiThrNode,*BiThrTree;
//全局变量pre,初始化时其右孩子指针为空,便在数的最左点开始建线索
//BiThrTree pre;
BiThrNode *pre=new BiThrNode;//不可以写这一句
//用算法5.3建立二叉链表
void CreateBiTree(BiThrTree &T)
{
Telemtype ch;
cin>>ch;
if(ch=='#')
T=NULL;
else{
T=new BiThrNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild );
}
}
void InThreading(BiThrTree p)
{ if(p)
{
InThreading(p->lchild);//左子树递归线索化
if(!p->lchild) //没有左孩子
{
p->LTag=1; //给p加上左线索
p->lchild=pre; //左孩子指针指向前驱pre
}
else
p->LTag=0;
if(!pre->rchild)
{
pre->RTag=1;
pre->lchild=p; //p的右孩子指针指向其后继p
}
else
p->RTag=0;
pre=p; //保持pre指针p的前驱
InThreading(p->rchild); //右子树递归线索化
}
}
int main()
{
pre->RTag=1;
pre->rchild=NULL;
BiThrTree tree;
cout<<"请输入建立二叉链表:\n";
CreateBiTree(tree);
InThreading(tree);
cout<<"线索化完毕!\n";
return 0;
}
以结点p为根的子树中序线索化
最新推荐文章于 2023-03-29 21:18:29 发布