二叉树学习:
1.概念
一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。
二叉树的特点:
- 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。
- 二叉树的子树有左右之分,其子树的次序不能颠倒。
2.数据结构中的二叉树
3.特殊二叉树
3.1完全二叉树
若堆的深度【层数】为h,除了最后一层,其上各层 (1~h-1) 的结点数都达到最大个数,并且最后一层所有的结点都连续集中在最左边,这就是完全二叉树。
3.2堆
堆是利用完全二叉树的结构来维护的一组数据。它的实现如下
3.3满二叉树
full binary tree 满二叉树:二叉树除了叶结点外所有节点都有两个子节点。
对于满二叉树而言,叶子的个数等于内部结点(非叶结点)+1,写作 L = l + 1
3.4完全二叉树与满二叉树的区别
满二叉树分为:full binary tree 和 perfect binary tree
full binary tree
perfect binary tree
3.5满二叉树不一定是完全二叉树
下面这个二叉树只是full binary tree,所以它不是完全二叉树。
3.6完全二叉树也不一定是满二叉树
3.7既是满二叉树也是完全二叉树的树
只有 perfect binary tree才既是满二叉树也是完全二叉树
4.二叉树的存储结构
二叉树一般可以使用两种存储结构,一种顺序结构,一种链式结构。
4.1顺序存储结构
顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。
4.2链式存储结构
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三叉链,当前我们学习中一般都是二叉链,后面课程学到高阶数据结构如红黑树等会用到三叉链。