【考试点·点睛】2015考研严蔚敏数據结构考点及算法精讲,数据结构 严蔚敏,严蔚敏数据结构视频,数据结构严蔚敏pdf,数据结构严蔚敏答案,严蔚敏的数据结构,数据结构与算法,数据结構与算法分析,java数据结构和算法,数据结构与算法习题
通过考察各种二叉链表不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数准确的说,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.中序遍历线索化二叉树