一、二叉排序树概述
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大(如果有相同的值,则该节点放在左子节点或右子节点都可)。在一般情况下,二叉排序树的查询效率比链表结构要高。
如下图所示就是一个二叉排序树:
二、二叉排序树的基本操作
2.1 创建和遍历二叉排序树
【案例描述】
给定如下数组:
arr = {
7, 3, 10, 12, 5, 1, 9}
其二叉排序树如下图所示:
要求:
- 创建二叉排序树
- 中序遍历二叉排序树
【代码实现】
/**
* @Description 创建和遍历二叉排序树
*/
public class No1_BinarySortTree {
public static void main(String[] args) {
int[] arr = {
7, 3, 10, 12, 5, 1, 9};
BinarySortTree tree = new BinarySortTree(null);
for (int item : arr){
tree.addNode(tree.new Node(item)); // 添加节点
}
tree.preOrder(); // 前序遍历
}
}
class BinarySortTree{
private Node root; // 根节点
public BinarySortTree(Node node){
this.root = node;
}
// 添加节点到二叉排序树中
public void addNode(Node node){
if (root == null){
root = node;
}else{
root.addNode(node);
}
}
// 中序遍历:左根右
public void preOrder(){
if (root != null){
root.preOrder();
}
}
/**
* 内部类:节点
*/
class Node{
int value;
Node left; // 指向左子节点
Node right; // 指向右子节点
public Node(int value){
this.value = value;
}
// 添加节点到二叉排序树中
public void addNode(Node node)