一、二叉树相关简介
树是一种非线性的数据结构,以分层的方式存储数据;
树由一组以边连接的节点组成;
树最上面的节点称为根节点;
如果一个节点下面有子节点,则称为父节点;
没有任何子节点的节点称为叶子节点;
二叉树的子节点不超过两个;
一个父节点的两个子节点分别称为左节点和右节点;
二叉查找树:是一种特殊的二叉树,相对较小的值保存在左节点中,较大的值保存在右节点中;
二、实现二叉查找树
a. 实现算法
1. 设根节点为当前节点
2. 如果待插入节点保存的数据小于当前节点,则设新的当前节点为原节点的左节点;反之执行第4步
3. 如果当前节点的左节点为null,就将新的节点插入这个位置,退出循环;反之,继续执行下一次循环
4. 设新的当前节点为原节点的右节点
5. 如果当前节点的右节点为null,就将新的节点插入这个位置,退出循环;反之,继续执行下一次循环
b. 遍历二叉查找树的几种方法
先序:根节点 => 左子树 => 右子树
中序:左子树 => 根节点 => 右子树
后序:左子树 => 右子树 => 根节点
分层遍历:根节点 => 子节点,左子树 => 右子树
c. 二叉树进行查找
查找给定值(算法:需要比较该值和当前节点的值的大小,通过比较,就能确定如果给定值不在当前节点时,该向左遍历还是向右遍历)
查找最大值(算法:因为较大的值在右边树上,只需要遍历右子树)
查找最小值(算法:因为较小的值在左边树上,只需要遍历左子树)
d. 二叉查找树删除节点
1.要删除的节点没有子节点
2.要删除的节点有子节点 => 递归操作
删除算法:
1. 判断当前节点是否包含要删除的节点,如果包含,删除该节点,如果不包含,比较当前节点数据和要删除的节点数据的大小
2. 如果待删除数据小于当前节点数据,则移至当前节点的左节点继续比较
3. 如果待删除数据大于当前节点数据,则移至当前节点的右节点继续比较
4. 如果待删除节点时叶子节点,只需要将从父节点指向它的链接指向null
5. 如果待删除节点包含一个子节点,那么原本指向它的节点就得做些调整,使其指向它的子节点
实现二叉查找树类:
1 | class Node { |