二叉搜索树的概念
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。
-来自百度百科
接下来我用可视化操作给大家模拟一棵二叉搜索树的添加过程
我们第一个节点插入6
第二个插入5
第三个插入8
第四个插入7
最后插入9
演示到这大家应该简单的可以理解二叉搜索树是怎么样啦,总结一下他的特征
- 节点的左子树只包含小于当前根节点树
- 节点的右子树只包含大于当前根节点树
- 所有左子树右子树也必须是二叉搜索树
那么知道这个思路的话我们写java代码就很好实现了
**
* @Description: 二叉搜索树
* @ClassName algorithm
* @Author: 王瑞文
* @Date: 2021/1/12 14:14
*/
public class BinarySearchTree {
/**
* 节点的元素值
*/
int data;
/**
* 左子树
*/
BinarySearchTree left;
/**
* 右子树
*/
BinarySearchTree right;
public BinarySearchTree(int data) {
this.data = data;
}
//根据二叉搜索树的特征去插入
public void insert(BinarySearchTree root, int data) {
if (data > root.data) {//先写右边的添加
if (root.right == null) { //如果右边为空说明可以添加
root.right = new BinarySearchTree(data);
} else {
insert(root.right, data);
}
} else {//左子树添加(添加的节点data<根数的data)
if (root.left == null) { //如果左边为空说明可以添加
root.left = new BinarySearchTree(data);
} else {
insert(root.left, data);
}
}
}
public void search(BinarySearchTree root) {
if (root != null) {
search(root.left);
System.out.println(root.data);
search(root.right);
}
}
public static void main(String[] args) {
int data[] = {6,5,8,7,9};
BinarySearchTree root = new BinarySearchTree(data[0]);
for (int i = 1; i < data.length; i++) {
root.insert(root, data[i]);
}
root.search(root);
}
}
main中的数据为测试数据,直接定死根为6。然后依次去插入5,8,7,9;
转载请标明出处