二叉树

性质1 在二叉树的第i层至多有(2^{i-1})个结点(i$geq$1)

性质2 深度为K的二叉树至多有(2^k-1)个节点 (k$geq$1)

二叉树的遍历

前序遍历

中序遍历

后序遍历

线索二叉树

一棵结点数目为n的二叉树,采用二叉链表的形式存储。对于每个结点均有指向左右孩子的两个指针域,而结点为n的二叉树一共有n-1条有效分支路径。那么,则二叉链表中存在2n-(n-1)=n+1个空指针域。那么,这些空指针造成了空间浪费。

![img](https://upload-images.jianshu.io/upload_images/7043118-ba659234c2fe8c18.png?imageMogr2/auto-orient/strip|imageView2/2/w/694/format/webp)

线索化

若结点的左子树为空,则该结点的左孩子指针指向其前驱结点。

若结点的右子树为空,则该结点的右孩子指针指向其后继结点。

![img](https://upload-images.jianshu.io/upload_images/7043118-25c559973889cb3a.png?imageMogr2/auto-orient/strip|imageView2/2/w/857/format/webp)

​ 线索二叉树

线索化带来新问题

ltag为0时,指向左孩子,为1时指向前驱

rtag为0时,指向右孩子,为1时指向后继

添加ltag和rtag属性后的结点结构如下:

![img](https://upload-images.jianshu.io/upload_images/7043118-a05b18037d16368f.png?imageMogr2/auto-orient/strip|imageView2/2/w/404/format/webp)

​ 添加标志线索二叉树结点

线索二叉树转变二叉树

![img](https://upload-images.jianshu.io/upload_images/7043118-163d458fb7d7f7e6.png?imageMogr2/auto-orient/strip|imageView2/2/w/888/format/webp)

​ 添加标志位的线索二叉树

二叉排序树

构造一个有n个结点的二叉排序树,在最坏的情况下,深度不超过n。

现有序列:61 87 59 47 35 73 51 98 37 93

构造过程如下:
1)索引 i = 0,A[i] = 61,结点61作为根结点,如图2.1:

img

2)索引 i = 1,A[1] = 87, 87 > 61,且结点61右孩子为空,故81为61结点的右孩子,如图2.2:

img

3)索引 i = 2,A[i] = 59,59 <
61,且结点61左孩子为空,故59为61结点的左孩子,如图2.3:

img

4)索引 i = 3,A[3] = 47,47 < 59,且结点59左孩子为空,故47为59结点的左孩子,如图2.4:

img

5)索引 i = 4,A[4] = 35,35 < 47,且结点47左孩子为空,故35为47结点的左孩子,如图2.5:

img

采用同样规则遍历整个数组得到如图2.6所示的一棵排序二叉树。

img

原文地址:https://www.cnblogs.com/snail-gao/p/11739726.html