数据结构-线索二叉树

一:

数据结构-线索二叉树_第1张图片

数据结构-线索二叉树_第2张图片



解析:1.用二叉链表作为存储结构只能找到左右孩子,而不能直接找到前驱后继信息,这是为什么呢?

   解:二叉链表存储结构,首先要知道二叉链表是一个什么样的结构,它是一个结点由左右孩子指针加这个点的数据组成,即

lchild data rchild
所以用这种方式作存储结构,只能找到左右孩子,而且这是链表形式,所以不能直接找到前驱后继,不像顺序存储那样;


2.含有N个结点的二叉链表有N+1个空链域,这是为什么呢?

 解:因为N个结点一共是有2N个链域,然后链表的结构中我们可以发现一个结点上接一个链域(要么是左链域,要么是右链域),也就是说一个指针指向一个结点,所以一共有N个结点,然后因为根是没有指针指向它的,所有一共用掉的指针域就是N-1个,所以空余的就是N+1; 


3. 以这种结点结构构成的二叉链表作为二叉树的存储结构,叫做线索链表,指向前驱和后继的指针叫线索,加上线索的二叉树叫线索二叉树,对二叉树进行某种形式遍历使其变为线索二叉树的过程叫线索化。

解析:这句话是很有意思的,我们要仔细的剖析,首先用二叉链表来存储二叉树,这是一种存储,然后对这个二叉链表又有点改进,因为二叉链表中有空指针域,所以我们对这个空指针域进行改造,指向前驱或后继,所以这个就变成了线索链表,用这种结构来存储的二叉树,这种二叉树就叫做线索二叉树,

然后我们遍历二叉树使其存储成为线索二叉树,这个就是线索化,注意这个是遍历,上面的是存储,这个分析清楚,下面的东西就很好理解了;



二:

数据结构-线索二叉树_第3张图片

数据结构-线索二叉树_第4张图片数据结构-线索二叉树_第5张图片



解析:首先这是存储,用二叉链表来存储二叉树的遍历,所以我们的视角就集中在这个存储结构上,上面说了我们二叉链表不能找到前驱后继,用线索链表才能找到,那么是怎么找到的呢?这个我们就要来分析一下了,首先,前中后序遍历顺序不同,则前驱后继也会不同。

首先是中序遍历,那么怎么找呢?中序遍历的顺序是左中右,所以我们看中序线索树,就会发现,叶子节点为空的都指向前驱后继;

后序线索树,是左右中,对应它的三种情况1,x为根,后继为空,这个是的,根是最后一个自然没有后继;

2.还是根据顺序左右中来判断的

3.还是左右中顺序来判断;



三:


数据结构-线索二叉树_第6张图片


解析:首先这是一个遍历算法,不是存储,这个要弄清,不过存储结构不一样,它是双向链表存储的,所以我们看它的算法其实就是遍历算法;









数据结构-线索二叉树_第7张图片

数据结构-线索二叉树_第8张图片




解析:遍历算法中加点其他东西,很好理解的。


你可能感兴趣的:(数据结构-线索二叉树)