如何构建二叉排序树

什么是二叉排序树?

二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。

 

 

 

 在算法设计中,往往需要有检索查找数据的操作,如果在数据量比较庞大的情况下用一般的数组或者链表之类的线性数据结构去实现的话,那么时间上会吃不消,这时我们就可以利用在大学时候学过的一门课叫数据结构与算法,其中就有一个数据结构——二叉排序树,它的查找能力是比较快的,平均时间复杂度一般是O(logn),好了废话不多说,直接上代码:

复制代码
 1 /**
 2  * 二叉排序树
 3  */
 4 public class BinarySortTreeUtil {
 5 
 6     public static void add(Node root, int data) {
 7        if (!find(root, data)) {
 8            addNode(root, data);
 9        }
10     }
11 
12     /**
13      * 添加元素
14      * 如果要添加的元素跟二叉树中的某一个元素相等则不添加
15      * @param root
16      * @param data
17      */
18     private static void addNode(Node root, int data) {
19         if (data < root.data) {
20             if (root.left == null) {
21                 // 如果左孩子为空,则直接赋值给左孩子
22                 root.left = new Node(data, null, null);
23             } else {
24                 // 左孩子
25                 addNode(root.left, data);
26             }
27         } else if (data > root.data){
28             if (root.right == null) {
29                 // 如果右孩子为空,则直接赋值给右孩子
30                 root.right = new Node(data, null, null);
31             } else {
32                 // 右孩子
33                 addNode(root.right, data);
34             }
35         }
36     }
37 
38     /**
39      * 二分查找
40      * @param data
41      * @return
42      */
43     public static boolean find(Node root, int data) {
44         if (root == null) {
45             return false;
46         }
47         if (data == root.data) {
48             return true;
49         } else if (data < root.data) {
50             return find(root.left, data);
51         } else {
52             return find(root.right, data);
53         }
54     }
55 }
56 
57 class Node {
58     int data;
59     Node left;
60     Node right;
61 
62     public Node(int data, Node left, Node right) {
63         this.data = data;
64         this.left = left;
65         this.right = right;
66     }
67 }
复制代码

 

posted @   没有你哪有我  阅读(1429)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示