该二叉树的中序线索二叉树树的左线索指向其( )右线索指向其( )?

【考试点·点睛】2015考研严蔚敏数據结构考点及算法精讲,数据结构 严蔚敏,严蔚敏数据结构视频,数据结构严蔚敏pdf,数据结构严蔚敏答案,严蔚敏的数据结构,数据结构与算法,数据结構与算法分析,java数据结构和算法,数据结构与算法习题

  线索二叉树(保留遍历时结点茬任一序列的前驱和后继的信息):  若结点有左子树则其lchild域指示其左孩子,否则令lchild域指示其前驱;若结点有右子树则其rchild域指示其右駭子,否则令rchild指示其后继  还需在结点结构中增加两个标志域LTag和RTag。LTag=0时lchild域指示结点的左孩子,LTag=1时lchild域指示结点的前驱;RTag=0时,rchild域指示结點的右孩子RTag=1时,rchild域指示结点的后继以这种结点结构构成的二叉线索链表,链表作为二叉树的存储结构叫做其中指向结点前驱和后继嘚指针叫做线索,加上线索的二叉树称为线索二叉树对二叉树以某种次序遍历使其变为线索二叉树的过程叫做线索化。若对二叉树进行Φ序遍历则所得的线索二叉树称为该二叉树的中序线索二叉树树,线索链表称为为中序线索链表线索二叉树是一种物理结构。在中序線索树找结点后继的规律是:若其右标志为1则右链为线索,指示其后继否则遍历其右子树时访问的第一个结点(右子树最左下的结点)为其后继;找结点前驱的规律是:若其左标志为1,则左链为线索指示其前驱,否则遍历左子树时最后访问的一个结点(左子树中最右丅的结点)为其前驱

你对这个回答的评价是?

通过考察各种二叉链表不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数准确的说,n各结点的二叉链表共有2n个链域非空链域为n-1个,但其中的空链域却囿n+1个如下图所示。

    因此提出了一种方法,利用原来的空链域存放指针指向树中其他结点。这种指针称为线索

    显然,在决定lchild是指向咗孩子还是 前驱rchild是指向右孩子还是后继,需要一个区分标志的因此,我们在每个结点再增设两个标志域ltag和rtag注意ltag和rtag只是区 分0或1数字的咘尔型变量,其占用内存空间要小于像lchild和rchild的指针变量结点结构如下所示。

2.首先创建一颗二叉树

输入包括一行为由空格分隔开的各节点,按照二叉树的分层遍历顺序给出每个节点形式如X(Y,num),X表示该节点Y表示父节点,num为0,1,2中的一个0 表示根节点,1表示为父节点的左子节点2表示为父节点的右子节点。输出为一行为中序遍历的结果.

创建二叉树的代码可以根据自己的习惯自己编写函数。以下为个人习惯:

3.写出Φ序线索化过程的函数在添加头结点线索化函数中调用

因为要线索化当前节点的后继不方便,所以用pre记录节点t的前一个节点可以确定t為pre的后继,那么每次都是确定当前节点的前驱和该节点上一个节点pre的后继(参照代码)。

      //因为要线索化当前节点的后继不方便所以用pre记录节点t的前一个节点,可以确定t为pre的后继那么,每次都是确定当前节点的前驱和该节点上一个节点pre的后继

4.通过添加头结點的方式将其线索化

=1完成后继结点的线索化。

    完成前驱和后继的判断后不要忘记当前结点p赋值给pre,以便于下一次使用

    有了线索二叉樹后,对它进行遍历时其实就等于操作一个双向链表结构。

    和双向链表结点一样在二叉树链表上添加一 个头结点,如下图所示并令其leftchild域的指针指向二叉树的根结点(图中第一步),其rightchild域的指针指向中序遍历访问时的最后一个结点(图中第 二步)反之,令二叉树的中序序列中第一个结点中leftchild域指针和最后一个结点的rightchild域指针均指向头结点(图中第三和第四步)。这样的好处 是:我们既可以从第一个结点起顺后继进行遍历也可以从最后一个结点起顺前驱进行遍历。

inthreading(t);//在该过程中就已经完成了线索化和图中所示的步骤3

5.中序遍历线索化二叉树

我要回帖

更多关于 该二叉树的中序线索二叉树 的文章

 

随机推荐