树
树的一些基本概念:
- 节点的度:子树的个数
- 树的度:所有节点度的最大值
- 叶子节点:度为0的节点
- 层数:根节点在第1层,根节点的子节点在第2层,以此类推
- 节点的深度:从根结点到该结点的唯一路径上的节点树
- 节点的高度:从当前节点到最远叶子节点的路径上的节点总数
- 树的深度:所有节点深度中的最大值
- 树的高度:所有节点高度中的最大值
- 树的深度等于树的高度
二叉树的一些特点
- 每个节点的度最大为2(最多拥有2棵子树)
- 左右子树是有顺序的
- 非空二叉树的第i层,最多有2i-1个节点
- 在高度为h的二叉树上最多有2h-1个节点
- 对于任何一棵非空二叉树,如果叶子节点个数为n0,度为2的节点个数为n,
则有:n0=n2+1 - 真二叉树:所有节点度要么为0,要么为2
- 满二叉树:所有节点度要么为0,要么为2,且所有叶子节点都在最后一层
完全二叉树的一些性质
- 叶子节点只会出现在最后两层,且最后一层的叶子节点都向左靠齐
- 度为1的节点只有左子树
- 度为1的节点要么是1个,要么是0个
- 同样节点数量的二叉树,完全二叉树的高度最小
- 假设完全二叉树的高度为h,那么至少有2h-1个节点,最多有2h-1个节点
- 一颗有n个节点的完全二叉树(n>0),从上到下、从左到右对节点从1开始编号,对任意第i个节点
- 如果i=1,它是根节点
- 如果i>1,它的父节点编号为floor(i/2)
- 如果2i<=n,它的左子节点编号为2i
- 如果2i>n,它无左子节点
- 如果2i+1<=n,它的右子节点编号为2i+1
- 非叶子节点个数n0 = floor((n+1)/2)=ceiling(n/2)
- 非叶子节点个数n1+n2 = floor(n/2)=ceiling((n-1)/2)