文章目录
背景
二叉树是数据结构中的重点,也是难点。二叉树是一种非线性结构,比数组、栈、队列等线性结构相比复杂度更高,想要做到心中有“树”,需要自己动手画图、观察、思考,才能领会其真谛。该文将会结合图形,深入理解二叉树、满二叉树及完全二叉树的概念。
概念
结点
- 结点是组成二叉树的最小单元。
– 用图形表示
– 用代码表示
// 结点
class Node<E> {
E e;
Node left, right;
Node(E e) {
this.e= e;
this.left = null;
this.right = null;
}
}
二叉树
- 每个结点的度(结点拥有的子树数目)不超过2的树叫做二叉树
二叉树的深度
- 结点的最大层次数称为树的深度或高度
满二叉树
- 指深度为k且有2k-1个结点的二叉树,即所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上。
- 下图中深度为4,24-1=15个结点,且所有叶子都在第四层上。
完全二叉树
- 一颗深度为k的二叉树,k层的结点都是连续靠左并不可隔开的,并且1~k-1层的结点也组成了一棵满二叉树,这样的二叉树,我们称为完全二叉树。
完全二叉树的线性存储
- 出于简便起见,完全二叉树通常采用数组进行线性存储
/**
* 完全二叉树的线性存储
*
* @author zhuhuix
* @date 2020-06-24
*/
public class FullBinaryTree {
private Object[] arr;
private int size;
FullBinaryTree(int capacity) {
this.arr = new Object[capacity + 1];
this.size = 0;
}
public int getSize() {
return this.size;
}
public boolean isEmpty() {