引入
将序列{1,3,6,8,10,14}构建成一个二叉树:
如果按照链表进行存放该二叉树,我们可以看一下其空间存储 :
我们现在是节约型社会,对待程序也不例外,能不浪费的时间或者空间,都应该考虑节省。我们从上图可以看出,有许多的空指针域没有使用,造成了资源的浪费,应该要想办法利用起来。
那么看看这样的空指针域有多少个呢,对于一个有n个结点的二叉链表,每个结点有左子节点和右子节点两个指针域,所以一共有2n个指针域。而n个结点的二叉树一共有n-1条分支,那么就会有2n-(n-1)=n+1个空指针域,这些空间被白白浪费。
我们在做双向链表遍历时,可以得到一个序列,我们可以知道每个结点的前驱结点和后继结点,但是二叉链表只能知道每个结点的左子节点和右子节点,如果想要知道某个
结点的前驱结点和后继结点,就需要先遍历一下,如果我们利用上面空闲出来的存储位置用来存放前驱结点和后继结点,那么将会是一举两得。
利用二叉