因为从看到写笔记,中间隔了好久,木有激情啊啊啊,但是立flag了丫,你看flag对我这样的人多有用。
二叉树
树啥的,差不多是不管看什么书都很不想看的一个章节了。
树的基本概念
节点:树结构中的每个元素都称作节点。
节点的高度:节点到叶子节点的最长路径
节点的深度:根节点到该节点所经历的边的个数
节点的层数:节点深度+1
树的高度:根节点的高度
二叉树的基本概念
二叉树:最多两个子结点。左子节点、右子节点
满二叉树:除了叶子节点外,每个节点都有左右两个子结点。
完全二叉树:最后一层的叶子节点都靠左排列,除了最后一层,其他层的节点个数都要达到最大。
二叉树的存储
链式存储
基于链表进行存储。每个节点三个字段,存储数据、左右子结点的指针。
顺序存储
基于数组进行存储。根节点存储在i = 1
的位置,根节点下标为i
,则其左子节点存储在下标为2*i
的位置,右子节点存储在下标为2*i+1
的位置。
二叉树的遍历
下面的描述都是左子树、右子树,不是左子节点、右子节点。
前序遍历:对树中的任意节点来说,先打印当前节点,再打印左子树,最后打印右子树。
中序遍历:对树中的任意节点来说,先打印左子树,再打印当前节点,最后打印右子树。
后序遍历:对树中的任意节点来说,先打印右子树,再打印当前节点,最后打印左子树。
二叉查找树
为了实现快速查找,支持快速查找、插入、删除数据。
要求:在树中的任意一个节点,其左子树的每个节点的值小于该节点,右子树节点的值大于该节点。
实现
二叉查找树的插入、查找、删除、前序遍历、中序遍历、后序遍历,按层遍历的实现如下
public class BinSearchTree<T extends Comparab