mei916 2016-12-07 01:53 采纳率: 20%
浏览 1150

谁能告诉我一下在下列程序中的问题是什么意思

#include
using namespace std;

typedef enum PointerTag {Link,Thread}; //Link==0,Thread==1;线索
typedef struct treenode
{
struct treenode left;
char data;
struct treenode *right;
PointerTag Ltag,Rtag; //左右标志
}Treenode,
Treep;
Treep pre;

//初始化二叉树
void init_tree(Treep &root)
{
root=NULL;
cout<<"初始化成功!"< }
//创建二叉树
void creat_tree(Treep &rt)
{
char ch;
ch=getchar();
if('#'==ch)
rt=NULL;
else
{
rt=(Treep )malloc(sizeof(Treenode));
rt->data=ch;
rt->Ltag=Link;
rt->Rtag=Link;
creat_tree(rt->left); //构造左子树
creat_tree(rt->right); //构造右子树

}
}
//前序遍历二叉树
void pre_order(Treep &rt)
{
if(rt!=NULL)
{
cout<data<<" ";
pre_order(rt->left);
pre_order(rt->right);
}
}

//前序线索化二叉树
void preThreading(Treep &p)
{
if(p)
{
if(!p->left)
{
p->Ltag=Thread;
p->left=pre; //前继线索
}
if(!pre->right)
{
pre->Rtag=Thread;
pre->right=p; //后继线索
}
pre=p;
if(Link==p->Ltag)
preThreading(p->left);
if(Link==p->Rtag)
preThreading(p->right);
}
}//InThreading
Treep preorderThreading(Treep &rt)
{
Treep thrt;
if( !(thrt = (Treep) malloc (sizeof(Treenode) ) ) )
exit(1);
thrt->Ltag=Link;
thrt->Rtag=Thread; //建头结点
thrt->right=thrt; //右指针回指
if(!rt)
thrt->left=thrt; //若二叉树空,则左指针回指
else
{
thrt->left=rt;
pre=thrt;

    preThreading(rt);        //前序遍历进行中序线索化


    pre->right=thrt;        //最后一个节点处理
    pre->Rtag=Thread;
    thrt->right=pre;
}
return thrt;

}

//前序遍历线索二叉树
void preorderTraver(Treep &thrt)
{
Treep p;
p=thrt->left;
while(p!=thrt)
{
cout<data<<" ";
if(Link==p->Ltag)
p=p->left;
else
p=p->right;
}
}

int main()
{
Treep root;
init_tree(root); //初始化树
cout<<"请输入二叉树,空值以#代表,输完要以Ctrl+Z表示结束,否则影响下个树的创建!:"<<endl;
creat_tree(root); //创建二叉树

//前序遍历二叉树
cout<<"前序遍历序列是:"<<endl;
pre_order(root);
cout<<endl;


Treep thrt;
thrt=preorderThreading(root);
preorderTraver(thrt);
cout<<endl;
return 0;

}

谁能告诉我一下在下列程序中“pre=p;if(Link==p->Ltag)preThreading(p->left);if(Link==p->Rtag)preThreading(p->right);”是什么意思

  • 写回答

1条回答 默认 最新

  • shen_wei 2016-12-07 06:55
    关注
     pre=p;
    if(Link==p->Ltag)   //搜索左边   
    preThreading(p->left);
    if(Link==p->Rtag)  ///搜索右边
    preThreading(p->right);
    
    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题