package org.bood.common.utils;
/**
* <p>
* 二分查找树 <br/>
* ps:如果data[0]等于一组数据中最小的,那么就会增加查找的时间复杂度。<br/>
* 平衡二叉树(追求极致的平衡),现实需求很难满足,红黑数孕育而生 <br/>
* </p>
*
* @author:bood
* @date:2020/10/16
*/
public class BinarySearchTree {
/**
* 根节点数
*/
int data;
/**
* 左边的数
*/
BinarySearchTree left;
/**
* 右边的数
*/
BinarySearchTree rigth;
public BinarySearchTree(int data) {
this.data = data;
this.left = null;
this.rigth = null;
}
// 二分查找
public void insert(BinarySearchTree root, int data) {
// 数大于根节点数,右边
if (data > root.data) {
// 右边是空的直接插入
if (null == root.rigth) {
root.rigth = new BinarySearchTree(data);
} else {
insert(root.rigth, data);
}
// 数大于根节点数,左边
} else {
// 左边是空的直接插入
if (null == root.left) {
root.left = new BinarySearchTree(data);
} else {
insert(root.left, data);
}
}
}
// 中序遍历
public void in(BinarySearchTree root) {
if (null != root) {
in(root.left);
System.out.print(root.data + " ");
in(root.rigth);
}
}
public static void main(String[] args) {
// 模拟测试数据
int[] data = {5, 6, 1, 7, 8, 9, 2, 4, 10};
BinarySearchTree root = new BinarySearchTree(data[0]);
// 算法校验
for (int i = 0; i < data.length; i++) {
root.insert(root, data[i]);
}
System.out.println("中序遍历:");
root.in(root);
}
}
混〔IT〕的小学生 → 热爱编程,喜欢挑战新事物!