急急急,,请教一个关于线索二叉树的问题,,为什么这段代码没能成功将其中序线索化??请高手指点。。。

作者&投稿:柳峡 (若有异议请与网页底部的电邮联系)
请教一道关于线索二叉树的问题~

先序线索二叉树中,某结点如果有孩子,则左孩子(如果没有就是右孩子)就是其先序后继
中序前驱和后继情况为镜像,具体请见数据结构教材

后序线索中某结点如果有右子树,则右指针域存放的是右孩子的地址,不是线索,但其后序后继却是其双亲结点,注意是二叉链表,只能从双亲往下,因此无法有效求解

我觉得你主要是不清楚pre指向的是什么。

我的数据结构书是严蔚敏版的,书上是这么说的:pre始终指向刚刚访问过的结点,若指针root指向当前访问的结点,则pre指向它的前续。
说的有点抽象。其实主要就是要清楚何时改变pre的值,“pre始终指向刚刚访问过的结点”就是说访问完一个结点后,就改变pre的值。
具体的思路是这样:首先书上建立线索的代码是一个中序遍历过程,其访问顺序分三步:左子树->本身结点->右子树。其中访问左子树就是指调用函数Inthread(root->Lchild)。任何一次访问结点的操作必然处在这三步中的第二步,因为第一步又可以分为三步。可见pre值的修改应该在第二步之后,且在第三步之前,即在Inthread(root->Rchild)之前。正如代码中一样。
另外要注意第一次调用Inthread前要先给pre赋值。

1.此代码中的root可能指向的是二叉树中的任意一结点,由于任意一结点可以看做一个子树的根节点,所以可以理解为root指向二叉树本身或其子树的根节点。
root->Lchild=pre这个代码是说让当前结点的左子树指向当前结点的前驱(pre),即建立一个前续索引。

2.此代码主要是判断是否要给pre建立一个后续线索。那么建立后续线索的前提条件是要右结点为空,这就是if中的判断。
pre->Rchild=root就是给pre建立一个后续索引。pre是root的前续,反过来root就是pre的后续。

3.前续和后续结点的指向通过pre与root互为前续后续的关系实现的。以首结点为例的话比较特殊,因为如果root指向首结点,那么这就是第一次调用,在调用前要预先给pre赋值。

主要的问题在于你的XS()和Visit()两个函数的一些逻辑不正确,我改了一下,供你参考:
void XS(BiTree &H,BiTree BT)//中序线索化
{
BiTree pre;//伴随指针,
H=(BiTree)malloc(sizeof(Bitnode));
if(H==NULL){printf("error!\n");return;}
H->lchild=BT;
H->rchild=NULL;
pre=H;
inorder(pre,BT);
printf("%c",pre->data);
pre->succ = H;
H->pred=pre;
}

void Visit(BiTree H)
{
BiTree a=H;
H=H->succ;
cout << endl << "======\n";
while(H!=a)
{printf("%c\n",H->data);
H=H->succ;}
}


急急急~~~有关word的问题???
2、你所说的“行距很大的空间”应该是段前或段后的空白,调整行距当然没用,可以选中这段之后点右键进入“段落”,把段前和段后的空白设为0行就可以了;3、这个问题比较奇怪,你可能说的不太清楚。根据上面两个问题推测,你这段文字应该是从网上拷贝下来的,是存在于一个表格里的,你“用鼠标选定...

急急急!!请教一个关于贝塔斯曼的问题!!
应该是5月20号,其实你不必担心 书友会寄目录来的时候会告知你下次买书的最后时间的

请教一个法律问题,很急,谢谢大侠们踊跃帮助,现在我很需要帮助
估计在三年以下,建议与被害方达成赔偿协议,由被害方出具谅解书,这样可以在量刑时予以酌定从轻。定性为寻衅滋事的可能性较大,仍有刑事和解的空间。

有没有律师请教一个交通法规问题!!急急!关于逃逸认定和拖车规定的_百度...
你并不知道发生事故,而且对方也没有受伤,不算逃逸。交警拖走事故车辆只是为了鉴定事故成因。要不是因为误会,一般让你自已驾车去交警队的。去时向他们解释下。找上级主管反映110接警的疏忽大意。认定你全责吧,必竟是机动车又驶离现场。不过有什么关系呢,赔偿一双鞋吗?加上拖车费什么的都由保险公司...

请教法律人士一个问题!~急!~
1、根据2010年7月1日实施的《侵权责任法》第22条:侵害他人人身权益,造成他人严重精神损害的,被侵权人可以请求精神损害赔偿。由此可见,造成严重精神损害时,方可请求精神损害赔偿,而以上你提到的情况构不成严重情况,所以不需赔偿精神损失费。严重情况一般指受害人因侵权行为造成死亡,残疾或者伤害的,...

高中化学:有关一种物质的一个小问题,急急急急急急急急急急急急急急急...
银离子和氨分子结合生成二氨合银离子,不是沉淀是离子化合物。将AgNO3溶液与适量NaOH溶液混合,然后滴加稀氨水至沉淀刚好溶解。总方程式 为2Ag++4NH3==2Ag(NH3)2+ 银氨溶液配制过程中:向溶液里逐滴滴加氨水首先析出AgOH:Ag++NH3·H2O==AgOH+NH4+ 常温下AgOH极不稳定,分解为Ag2O暗棕色沉淀 2...

问一个关于flash按钮控制影片播放的问题,急急急!
不用那么麻烦,只要在每个12帧处加stop(); 就行了,自然是每秒都停。按钮加代码:on (release) { play();}

请教大家一个有关现代汉语的问题,急! 谢谢大家!
而应该只研究“束缚”和“发生”这两个词,这两个词一看就是明显的偏正式动词,所以说,这两句都是由偏正类词语充当谓语。反正,中国的汉语本身是一种简单的语言,不过研究的人多了,专家也就多了,现在被中国人自己把自己的语言搞复杂化了——这是中国人的德性所致,说句实在话,一种供人类交流用...

请教一个关于帝豪空调的问题,急急急!!!
除了楼上所说的情况还有三种可能:一,开关的好坏。二,保险丝是否断裂。三,继电器使用是否正常。

爱上一个有小孩子的男人怎么办?急急急
也许那是缘份吧,有时有一个条件上合适你结婚的人你却不喜欢没感觉,一个条件上不合适你结婚的人你却对他爱暮有佳,如果你真的要跟这种有孩子丧偶的男人结婚也不是说就不幸福,只是说以后人生道路更难走些,自己的路自己想清楚了再走,如果觉得他真是你要找的人,而且他也爱你的话,那就可以考虑...

东城区18752215848: 请教一道关于线索二叉树的问题 二叉树在线索化后,仍不能有效求解的问题是(D). -
任刘百畅:[选项] A. 先序线索二叉树中求先序后继 B. 中序线索二叉树中求中序后继 C. 中序线索二叉树中求中序前驱 D. 后序线索二叉树中求后序后继 请问为什么选D啊

东城区18752215848: 线索二叉树是一种什么结构? -
任刘百畅: 物理结构.包括线性存储和非线性存储其中,线性存储结构有顺序、链接、索引和散列4种结构.非线性存储结构有:树形存储结构、图形存储结构. n个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域.利用二叉链表中的空指针域,存放...

东城区18752215848: 请教一个二叉线索树的问题 -
任刘百畅: 二叉树前序线索化后, 遍历的最后一个节点的链域为空;其他的类似, 你画个图就知道了.以一个只有一个根和两个叶的二叉树为例,在后序线索化后,根节点的左链右链均有孩子,TAG=0,链域不空.左孩子无前驱,其链域TAG=1,其内容可以设定为空(有些算法里面好像设定其指向根节点).对于右孩子,左链存前驱根的左孩子,右链存其后继根.可见,这里只有一个节点没有保存其前驱,而其他节点都有前驱后继信息.

东城区18752215848: 线索二叉树的特点是什么 -
任刘百畅: 不知道是否你要的答案二叉树的遍历本质上是将一个复杂的非线性结构转换为线性结构,使每个结点都有了唯一前驱和后继(第一个结点无前驱,最后一个结点无后继).对于二叉树的一个结点,查找其左右子女是方便的,其前驱后继只有在遍历中得到. 线索二叉树的优点是便于在中序下查找前驱结点和后继结点.

东城区18752215848: C++二叉树的一道题目线索二叉树 -
任刘百畅: 先序线索二叉树中,某结点如果有孩子,则左孩子(如果没有就是右孩子)就是其先序后继 中序前驱和后继情况为镜像,具体请见数据结构教材 后序线索中某结点如果有右子树,则右指针域存放的是右孩子的地址,不是线索,但其后序后继却是其双亲结点,注意是二叉链表,只能从双亲往下,因此无法有效求解

东城区18752215848: 中序线索二叉树的左线索指向其( )右线索指向其( )? -
任刘百畅: 答: 中序线索二叉树的左线索指向其前一个结点,左线索指向其后一个结点.

东城区18752215848: 线索二叉树的结构体定义是什么 -
任刘百畅: 线索二叉树的结点结构 二叉树的遍历本质上是将一个复杂的非线性结构转换为线性结构,使每个结点都有了唯一前驱和后继(第一个结点无前驱,最后一个结点无后继).对于二叉树的一个结点,查找其左右子女是方便的,其前驱后继只有在遍...

东城区18752215848: 二叉树线索化的思想是什么? -
任刘百畅: 线索二叉树就是 使用的对象:树节点中没有使用的n-1个空指针(n个树节点,空指针永远都是n+1个,自己推下). 运行的原则:某种深度遍历顺序——先序,中序,后序 过程:按照中序(当然也可以是其他的遍历)的前驱后继关系,若p的左...

东城区18752215848: 数据结构线索二叉树怎么画 已知二叉树的前序遍历序列是AEFBGCDHIKJ,中序遍历序列是EFAGBCHKIJD,画出此二叉树,并画出它的后序线索二叉树(... -
任刘百畅:[答案] 你求得后序排列应该错了吧应该是FEGKJIHDCBA画法嘛,首先从前序遍历得知根是A,所以从中序遍历中知道左分支是EF,右分支是GBCHKIJD,而前序遍历和中序遍历中E都在F之前,所以F是E的右孩子,所以可得到左分支剩下的是前序BG...

东城区18752215848: 线索二叉树 -
任刘百畅: 我先说一说 每个 节点 那 五个格 的数据 的含义 中间哪一个 是 存储数据 从左向右 ,第一个 和 第五个 是指针,具体指向什么 取决于第二个 和 第四个的值 第二个 如果是零,实线表示,则 第一个指向的是 左孩子 第二个 如果是1,虚线表示,则 第一个 指向的是 在中序遍历次序下 ,该节点的前驱(即前一个),,如果 该节点 自己就是第一个,没有前驱,,则为空指针 ,,图中最左边 的的C就是这样 (中序遍历 是先访问左孩子,再访问根,再访问右孩子,,图中节点的中根遍历次序为CBDAFHGIE) 第四个为0 ,则第五个指向右孩子 第四个为1.则第五个 指向 中序遍历次序下的后继,,如本身已经是最后一个 没有后继 ,则为空指针

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网