数据结构学习日志之十--二叉树

二叉树是一种特殊的树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。


二叉树可以有5种形态,1.空二叉树 2.仅有根结点的二叉树 3.右子树为空的二叉树 4.左右子树非空的二叉树 5.左子树为空的二叉树

二叉树的性质

1.在二叉树的第i层至多有2^(i-1)次方个结点(i>=1)

2.深度为k的二叉树至多有2^k-1个结点

3.对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,那么n0 = n2 + 1;

一棵深度为k且有2^k-1个结点的二叉树称为满二叉树。

完全二叉树:假设二叉树深度为k,除第k层外,其他各层(1~k-1)的结点数都达到最大个数,第k层的结点都连续集中在最左边。如果将满二叉树从1至n开始编号,如果完全二叉树的结点数为n,那么当且仅当其每一个结点都与满二叉树编号从1至n的结点都一一对应。


完全二叉树有两个重要特性

1.具有n个结点的完全二叉树深度为floor(log2 n) +1 (floor为向下取整)

2.如果对一棵有n个结点的完全二叉树,则对任意一个结点i有

  • 如果i > 1,则其双亲PARENT(i)是结点floor(i/2)
  • 如果2i > n , 则结点i为叶子结点,否则其左孩子LCHILD(i)是结点2i
  • 如果2i+1 > n, 则结点i无右孩子;否则其右孩子RCHILD(i)是结点2i+1.

可以这么理解,对于任意一层k(k>1)的第一个结点编号为i,由二叉树性质2可得,i = 2^(k-1), 即是第k-1层最大数+1,那么它的左孩子肯定是第k+1层的第一个结点,编号是2^k = 2*(2^(k-1)) = 2i,若2i>n,则无左孩子;同理可得其他条件

二叉树的存储结构

1.顺序存储结构

用一组连续地址依次自上而下、自左至右存储完全二叉树上的结点元素。


图中以0表示不存在此结点,由此可见,这种顺序结构仅适用于完全二叉树,因为,在最坏的情况下,一个深度为k且只有k歌结点的单支树却需要长度为2^k-1的一维数组

2.链式存储结构


猜你喜欢

转载自blog.csdn.net/chanbendong/article/details/80065024