一、树是什么
- 树是由n(n>0)个有限节点组成的一个层次关系的集合。
- 树的特点:
①每一个节点都有0个或多个子节点。
②没有父节点的节点为根节点。
③每一个非根节点都有一个父节点。
④除了根节点外,每个子节点可以分为多个不相交的子树。 - 图示
- 二叉树:每个节点至多只有两个子树。
- 满二叉树:除了最后一层节点没有子节点以外,每一层的所有节点均有两个子节点。
- 完全二叉树:由满二叉树引出来的,区别在于,完全二叉树的最后一层并没有达到最大个数,而是在最后一层连续集中在左边。
- 节点的度:树中某个节点的子树的个数。
- 树的度:树中各节点的度的最大值。
- 分支节点:度不为零的节点。
- 叶子节点:度为零的节点。
二、二叉树的性质
- 非空二叉树第i层最多有2i-1个子节点(i>=1)
- 非空二叉树的叶子节点数=双分支节点数+1(N0=N2+1)
- 深度为h的二叉树最多有2h-1个节点,最少有h个节点
- 具有n个节点的完全二叉树深度为[log2n]+1,[]表示向下取整
- 有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:
1)若I为结点编号则 如果I>1,则其父结点的编号为I/2;
2)如果2I<=N,则其左孩子(即左子树的根结点)的编号为2I;
3)若2I>N,则无左孩子;
4)如果2I+1<=N,则其右孩子的结点编号为2I+1;若2I+1>N, 则无右孩子。
三、二叉树的存储结构
- 二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树。普通二叉树转完全二叉树的方法很简单,只需给二叉树额外添加一些节点,其值为0,将其"拼凑"成完全二叉树即可。
- 二叉树的链式存储只需从树的根节点开始,将各个节点及其左右孩子使用链表存储即可。