数据结构之二叉树总结

数据结构之二叉树

  • 一种非线性数据结构
  1. 树(森林)
    1. 四种表示方法
      1. 树形表示法
      2. 嵌套集合表示法
      3. 凹入表表示法
      4. 广义表表示法
  2. 二叉树
    1. 五种基本形态
      1. 空二叉树
      2. 单结点的二叉树
      3. 右子树为空的二叉树
      4. 左子树为空的二叉树
      5. 左右子树均非空的二叉树
    2. 两种特殊的二叉树
      1. 满二叉树:一颗二叉树的深度为k,则其有2^k-1个节点。
      2. 完全二叉树:先把前面的节点填满才能填后面的。满二叉树是完全二叉树的特例。
    3. 遍历二叉树
  3. 树形结构的存储方式:链式存储和顺序存储
  4. 线索二叉树
    1. 堆的构造
    2. 堆的插入与删除
  5. 哈夫曼树:一类带权路径长度最短的树。

几种树的名称:多叉树、二叉树、二叉排序树、完全二叉树、完全二叉排序树、平衡二叉树、平衡二叉排序树(AVL树)

满二叉树是完全二叉树中的一种特殊情况;堆是完全二叉树中的一种特殊情况。完全二叉树是平衡二叉树中的一种。

二叉树的性质:

  1. 在二叉树第i层上至多有2^(i-1)个节点(i>=1)
  2. 深度为k的二叉树至多有2^k-1个节点
  3. 对任何一棵二叉树T,设n_0、n_2分别是叶节点的个数和度为2的节点的个数,则有n_0=n_2+1。
  4. 具有n个节点的完全二叉树的深度为「log2(n)」+1。(向下取整)
  5. 对于一棵有n个节点的完全二叉树,其任何一个编号为i的节点(1<=i<=n),都有以下结果:
    1. 关于父节点:
      1. 若i=1,则节点i是根节点,无父节点;
      2. 若i>i,则节点i的父节点是节点「i/2」。
    2. 对于左子节点:
      1. 若2i<n,则节点 i 的左子节点是2i;
      2. 若2i>n,则节点 i 无左子节点。
    3. 对于右子节点:
      1. 若2i+1<n,则节点 i 的右子节点是2i+1;
      2. 若2i+1>n,则节点 i 无右子节点。

二叉树的存储方式:

  • 顺序存储结构:适合完全二叉树;完全二叉树可用一维数组依次存储它的各节点。
  • 链式存储结构:对于一般二叉树(非完全二叉树),比较适合使用一种二叉链表结构(非线性链表)来存储;在这种链表中,每个节点至少包含3个域:数据域和左、右指针域。

二叉树的遍历

  1. 前序:即先根遍历(整棵树的根节点在最前面),遍历顺序为:根—左子树—右子树;按照这种顺序遍历,直至没有子节点为止。
  2. 中序:即中根遍历,遍历顺序为:左子树—根—右子树;
  3. 后序:即后根遍历(整棵树的根节点在最后面),遍历顺序为:左子树—右子树—根

在编程实现时,前三种遍历需要借助递归实现。

  1. 按层遍历:从根节点开始逐层向下遍历,直至最后一层。对于同一层的节点,由左向右遍历。

树的存储结构:

  1. 父节点表示法:除根节点外每个节点都有一个指向其父节点的指针,而不要求每个节点具有指向子节点的指针。这种表示法只需要用一维数组来存储树的有关信息。
  2. 子节点表示法
  3. 树的子节点-父节点表示法
  4. 子节点-兄弟表示法:又称为二叉链表表示法,以二叉链表的形式作为树的存储结构。

二叉排序树:见百度百科

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树

  1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 左、右子树也分别为二叉排序树;
  4. 没有键值相等的节点。

几种特殊的二叉树:

  • AVL树,即(严格)平衡二叉排序树,满足以下性质:
  1. 它的左子树和右子树的深度之差的绝对值不超过1
  2. 它的左、右子树都是平衡二叉排序树。
  1. 堆中某个节点的值总是不大于或不小于其父节点的值;

  2. 堆总是一棵完全二叉树。

根节点(堆顶元素)最大的堆叫做最大(值)堆或最大根堆,根节点最小的堆叫做最小(值)堆或最小根堆。

B-树:多叉平衡查找树,适合在外存(如磁盘文件)进行数据存储和查找。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章