常见数据结构

174 阅读3分钟

树的概念采用递归的方式进行定义 树是有n(n>=0)个结点的有限集。

  1. 当n=0时称为空树,
  2. 当n>0时
    1. 有且仅有一个结点被称为根结点
    2. 当n>1时除根结点外其余结点可分为m(m>0)个互不相交的有限集,且每一个有限集本身又为树

结点

结点的度

结点拥有子树的个数被称为结点的度

结点之间的关系

兄弟结点、双亲结点

结点的层次关系

从根节点出发,根节点为第一层,根节点的孩子节点为第二层,以此类推

树的深度

树结点的最大层次为树的深度

二叉树

二叉树是n(n>=0)个节点的有限集合,n为0被称为空二叉树,不为零时由一个根节点和两个不互相交的左右子树组成

二叉树的性质

  1. 二叉树结点的个数为2^k(k为二叉树的深度) - 1
  2. 如果完全二叉树二叉树按顺序编号,设当前结点编号为i,则左孩子编号为2i,右孩子编号为2i+1,当前结点的双亲结点为i/2
  3. 二叉树第i层结点的个数最多有2^(i-1)
  4. 具有n个结点的完全二叉树,深度为log2(n) + 1

满二叉树

如果一棵二叉树的结点度数只有0和2,并且度数为0的结点均在同一层上,那么这个二叉树为满二叉树。

当满二叉树的深度为 k 那么结点的个数为2^k-1。

完全二叉树

一棵二叉树除了最底层结点没有填满,其余结点都达到最大值,并且最下一层的结点均集中在最左边。若最底层的高度为 h 那么改成包括1~2h个结点。

二叉搜索树

二叉搜索树是一个有序树

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值;
  • 它的左、右子树也分别为二叉排序树;

平衡二叉搜索树

  • 它是一棵空树或者它的左右子树的高度差绝对值不超过1
  • 左右子树都是一棵平衡二叉树

二叉树的存储

  • 链式存储
  • 顺序存储

顺序存储

如果父节点的下标为 i,那么做孩子的下标就是 i2+1,右孩子就是 i2+2。

二叉树的遍历方式

  • 深度优先遍历(递归法、迭代法)
    • 前序遍历
    • 中序遍历
    • 后序遍历
  • 广度优先遍历(迭代法)
    • 层次遍历

红黑树

www.jianshu.com/p/e136ec792…

通常被认为装入了数组的完全二叉树

堆的性质

  1. 双亲结点的值总是大于或者小于子结点的值
  2. 堆总是一颗完全二叉树

堆的实现

juejin.cn/post/684490…

优先队列

相较于普通队列的先进先出,优先队列被赋予优先级,每次出队列的数为最高优先级的数

优先队列的实现

二叉堆