数据结构——树(一)

236

这是我参与更文挑战的第15天,活动详情查看:更文挑战

树与二叉树

  • 树中一个结点的子结点个数成为该结点的度。树中结点的最大度数称为树的度
  • 结点的层次从树根开始定义,根节点称为第一层
  • 结点的高度从叶结点自底向上逐层叠加
  • 结点的深度从根结点自顶向下逐层累加
  • 树的高度是树的结点的最大层数
  • 路径:两个结点之间所经过的结点序列构成
  • 路径长度:路径上的边数

性质

  • 树的结点数等于所有结点的度数+1
  • 度为m的树中第i层上至多有mi1个结点m^{i-1}个结点
  • 高度为h的m叉树至多有(mh1)(m1)(m^h-1)(m-1)个结点
  • 具有n个结点的m叉树的最小高度为logm(n(m1)+1)|log_m(n(m-1)+1)|

二叉树

二叉树与度为2的结点的区别

  • 度为2的树至少有3个结点,而二叉树可以为空
  • 二叉树必须确定左右次序

几个特殊的二叉树

满二叉树

一颗高度为h,且含有2h1个结点的二叉树称为满二叉树2^h-1个结点的二叉树称为满二叉树

若某结点编号为i ,则其父亲结点为i2其子节点为2i,2i+1其父亲结点为\left \lfloor \frac{i}{2}\right\rfloor 其子节点为2i,2i+1

完全二叉树

一个高度为h,有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树的编号为1~n的结点一一对应的时候

  • in2时,则称i为分支节点,否则为叶子结点i \le \left \lfloor \frac{n}{2}\right\rfloor 时,则称i为分支节点,否则为叶子结点
  • 叶子结点只可能在层次最大的两层出现,对最大层次中的叶子结点,都依次排列在该层最左边的位置上
  • 若有度为1的结点,则只可能有一个,且该结点只有左孩子而无右孩子(重要特征)
  • 按层序编号后,一但某结点i只有左孩子或为叶子结点则编号大于i的均为叶子结点

二叉排序树

  • 左子树小于根节点右子树大于根节点

平衡二叉树

左子树和右子树深度之差不超过1

二叉树的性质

  • 非空二叉树的叶子结点数等于度为2的结点数加1 即n0=n2+1n_0 = n_2 +1

  • 非空二叉树上第k层上至多有2k12^{k-1}个结点

  • 高度为h的二叉树至多有2h12^h-1个结点

  • 对完全二叉树按从上到下,从左到右的顺序依次编号1,2,,,n,则有一下关系:结点所在层次(深度)为log2i+1\left \lfloor log_2i \right\rfloor+1

  • 具有n个(n>0)结点的完全二叉树高度为log2n+1log2n+1\left \lfloor log_2n \right\rfloor+1 或\left \lceil log_2(n+1) \right\rceil

二叉树的存储结构

顺序存储

即将二叉树编号为i的结点存储在某个数组下标i-1的分量中,通过一些方法确定结点在逻辑上的父子和兄弟关系

但需要注意数组的第一个结点下标应为1

链式存储

typedef struct BiTNode{
    ElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;