数据结构 - 树、二叉树、完全二叉树、真二叉树、满二叉树

01-树

节点的度:子树的个数。
树的度:所有节点度中的最大值。
叶子节点:度为0的节点。
非叶子节点:度不为0的节点。
层数:根节点在第一层,根节点的子节点在第二层,以此类推
节点的深度:从根节点到当前节点的唯一路径上的节点总数。
节点的高度:从当前节点到最远叶子节点的路径上的节点总数。
树的深度:所有节点深度中的最大值。
树的高度:所有节点高度中的最大值。
树的深度等于树的高度。
有序树:树中任意节点的子节点之间有顺序关系。

02-二叉树及其性质

二叉树:
每个节点的度最大为2(最多拥有2棵子树)
左子树和右子树是有顺序的。
即使某节点只有一棵子树,也要区分左右子树。
非空二叉树的第i层,最多有2^(i-1)个节点(i>=1)
在高度为h的二叉树上最多有2^h-1个节点(h>=1)

对于任何一棵非空二叉树,如果叶子节点个数为n0,度为2的节点个数为n2,则有:n0=n2+1
假设度为1的节点个数为n1,那么二叉树的节点总数 n = n0 + n1 + n2
二叉树的边数 T = n1 + 2*n2 = n-1 = n0 + n1 + n2 -1

03-真二叉树、满二叉树

真二叉树:所有节点的度要么是0,要么是2。
满二叉树:所有节点的度要么是0,要么是2。并且所有叶子节点都在最后一层.
在同样高度的二叉树中,满二叉树的叶子节点数量最多、总节点数量最多。
满二叉树一定是真二叉树,真二叉树不一定是满二叉树。

假设满二叉树的高度为h(h>=1),那么
第i层的节点数量:2^(i-1)
叶子节点数量:2^(h-1)
总节点数量:n = 2^h -1

04-完全二叉树01-概念

完全二叉树:叶子节点只会出现最后2层,且最后1层的叶子节点都靠左对齐。
完全二叉树从根节点到倒数第二层是一棵满二叉树。
满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

05-完全二叉树02-性质01

度为1的节点只有左子树。
度为1的节点要么是1个,要么是0个。
同样节点数量的二叉树,完全二叉树的高度最小。

假设完全二叉树的高度为h (h>=1),
那么至少有2(h-1)节点(20+21+22+…+2^(h-2)+1)
最多有2^h-1个节点 (20+21+22+…+2(h-1),满二叉树)

总节点数量为n,则
2^(h-1)<= n < 2^h
h-1 <= log2 n < h
h = floor(log2 n) + 1

06-完全二叉树03-性质02

一棵有n个节点的完全二叉树(n > 0),从上到下、从左到右对节点1开始编号,对任意第i个节点:
如果i=1,它是根节点。
如果i>1,它的父节点编号为floor(i/2)。
如果2i <= n,它的左子点编号是2i。
如果2i > n,它无左子节点。
如果2i + 1 <= n,它的右子点编号是2i+1。
如果2i + 1 > n,它无右子节点。

一棵有n个节点的完全二叉树(n > 0),从上到下、从左到右对节点0开始编号,对任意第i个节点:
如果i=0,它是根节点。
如果i>0,它的父节点编号为floor((i-1)/2)。
如果2i+1 <= n-1,它的左子点编号是2i+1。
如果2i+1 > n-1,它无左子节点。
如果2i + 2<= n-1,它的右子点编号是2i+2。
如果2i + 2> n-1,它无右子节点。

07-完全二叉树04-面试题

如果一棵完全二叉树有768个节点,求叶子节点的个数。
假设叶子节点个数为n0,度为1节点个数为n1,度为2节点个数为n2
总节点个数 n = n0 + n1 + n2 , 而且 n0 = n2 + 1
n = 2n0 + n1 - 1
完全二叉树n1要么为0,要么为1
当n1为1时,n=2n0,n必然是偶数
叶子节点个数n0 = n/2,非叶子节点个数 n1+n2 = n/2
当n1为0时,n=2n0-1,必然为奇数
叶子节点个数n0 = (n+1)/2,非叶子节点个数 n1+n2 = ( n-1)/2

08-完全二叉树05-公式总结

总节点数为n,则叶子节点数:n0 = floor((n+1)/2) =ceiling(n/2)
非叶子节点个数 n1+n2 = floor(n/2) = ceiling((n-1)/2)

猜你喜欢

转载自blog.csdn.net/samuelandkevin/article/details/104766904