树
树的概念采用递归的方式进行定义 树是有n(n>=0)个结点的有限集。
- 当n=0时称为空树,
- 当n>0时
- 有且仅有一个结点被称为根结点
- 当n>1时除根结点外其余结点可分为m(m>0)个互不相交的有限集,且每一个有限集本身又为树
结点
结点的度
结点拥有子树的个数被称为结点的度
结点之间的关系
兄弟结点、双亲结点
结点的层次关系
从根节点出发,根节点为第一层,根节点的孩子节点为第二层,以此类推
树的深度
树结点的最大层次为树的深度
二叉树
二叉树是n(n>=0)个节点的有限集合,n为0被称为空二叉树,不为零时由一个根节点和两个不互相交的左右子树组成
二叉树的性质
- 二叉树结点的个数为2^k(k为二叉树的深度) - 1
- 如果完全二叉树二叉树按顺序编号,设当前结点编号为i,则左孩子编号为2i,右孩子编号为2i+1,当前结点的双亲结点为i/2
- 二叉树第i层结点的个数最多有2^(i-1)
- 具有n个结点的完全二叉树,深度为log2(n) + 1
满二叉树
如果一棵二叉树的结点度数只有0和2,并且度数为0的结点均在同一层上,那么这个二叉树为满二叉树。
当满二叉树的深度为 k 那么结点的个数为2^k-1。
完全二叉树
一棵二叉树除了最底层结点没有填满,其余结点都达到最大值,并且最下一层的结点均集中在最左边。若最底层的高度为 h 那么改成包括1~2h个结点。
二叉搜索树
二叉搜索树是一个有序树
- 若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;
- 若它的右子树不空,则右子树上所有结点的值均大于它的根节点的值;
- 它的左、右子树也分别为二叉排序树;
平衡二叉搜索树
- 它是一棵空树或者它的左右子树的高度差绝对值不超过1
- 左右子树都是一棵平衡二叉树
二叉树的存储
- 链式存储
- 顺序存储
顺序存储
如果父节点的下标为 i,那么做孩子的下标就是 i2+1,右孩子就是 i2+2。
二叉树的遍历方式
- 深度优先遍历(递归法、迭代法)
- 前序遍历
- 中序遍历
- 后序遍历
- 广度优先遍历(迭代法)
- 层次遍历
红黑树
堆
通常被认为装入了数组的完全二叉树
堆的性质
- 双亲结点的值总是大于或者小于子结点的值
- 堆总是一颗完全二叉树
堆的实现
优先队列
相较于普通队列的先进先出,优先队列被赋予优先级,每次出队列的数为最高优先级的数