二叉树的性质:
- 非空二叉树的第i层,最多有2^(i-1)个节点(i-1)。
- 在高度为h的二叉树上最多有2^h - 1个结点(h>=1)。
- 对于任何一颗非空二叉树,如果叶子节点个数为n0,度为2的节点个数为n2,则有:n0=n2+1
真二叉树:
所有节点的度都要么为0,要么为2
满二叉树:
所有节点的度都要么为0,要么为2。且所有的叶子节点都在最后一层。
完全二叉树:
叶子节点只会出现最后2层,且最后一层的叶子结点都靠左对齐。
完全二叉树的性质:
- 度为1的节点只有左子树。
- 度为1的节点要么是1个,要么是0个。
- 同样节点数量的二叉树,完全二叉树的高度最小。
- 假设完全二叉树的高度为h(h>=1),那么至少有2^(h-1)个节点 ,最多有2^h-1个节点,假设总节点数目为n:
- (1).2^(h-1)<=n<2^h
- (2).h-1<=log2n<h
- (3).h = math.floor(log2n)+1
一个有n个节点的完整二叉树(n > 0), 从上到下,从左到右对节点从0开始编号, 对任意第i个节点:
- 如果i = 0,它是根节点。
- 如果i > 0,它的父节点编号为math.floor((i- 1)/2)。
- 如果2i + 1 <= n - 1,它的左子节点编号为2i + 1。
- 如果2i + 1 > n - 1,它无左子点。
- 如果2i + 2 <= n - 1,他的右子节点编号为2i + 2。
- 如果2i + 2 > n - 1,它无右子节点。
二叉树遍历
- 即遍历过程中,根的位置
- 前序遍历:根->左->右
- 中序遍历:左->根->右
- 后序遍历:左->右->根
- 层序遍历:按层遍历,由上到下