二叉搜索树(二叉排序树)—Java(上)

简介: 二叉搜索树(二叉排序树)—Java(上)

🔎概念

二叉搜索树又称二叉排序树

可以是一棵空树

也可以不是一棵空树(doge)

上图所示就是一棵二叉搜索树

根节点root值为7,root的左子树的值全部比root的值小,root的右子树的值全部比root的值大

root.left–>root的左子树的根节点4,其左侧节点的值1比4小,右侧节点的值6比4大(但它们均小于7)

root.right–>root的右子树的根节点11,其左侧节点的值9比11小,右侧节点的值13比11大(但它们均大于7)


🔎模拟实现二叉树

🌻find–>查找二叉树中的元素

public TreeNode find(int val) {
        TreeNode cur = root;
        while(cur != null) {
            if(cur.val < val) {
                cur = cur.right;
            }else if(cur.val > val) {
                cur = cur.left;
            }else {//cur.val == val-->find!
                return cur;
            }
        }
        //未找到
        return null;
}

查找二叉搜索树中指定的val值

如果cur节点的值小于要查找的元素的值,cur = cur.right–>去树的右侧查找

如果cur节点的值大于要查找的元素的值,cur = cur.left–>去树的左侧查找


🌻insert–>在二叉树中插入元素

public void insert(int val) {
        if(root == null) {
            root = new TreeNode(val);
            return;
        }
        TreeNode pre = null;//叶子节点
        TreeNode cur = root;
        while(cur != null) {
            pre = cur;
            if(cur.val < val) {
                cur = cur.right;
            }else if(cur.val > val){
                cur = cur.left;
            }else {//二叉搜索树中不要插入相同的数据(无意义)
                return;
            }
        }
        if(val < pre.val) {
            pre.left = new TreeNode(val);
        }else {
            pre.right = new TreeNode(val);
        }
}

如果该搜索树是一棵空树,则插入的元素就是这棵树的root(根节点)

如果不是,在叶子节点的左/右侧插入对应的元素


🌻inorder–>中序遍历二叉树

public void inOrder(TreeNode root) {
        if(root == null) return;
        inOrder(root.left);
        System.out.print(root.val + " ");
        inOrder(root.right);
}
• 1
• 2
• 3
• 4
• 5
• 6

🌻remove–>删除二叉树中的元素

cur–>要删除的节点 / pre–>要删除节点的父节点 / root–>根节点

  • 二叉搜索树的删除
  • cur.left == null–>要删除节点的左侧为空
    1)cur是根节点,root = cur.right
    2)cur不是根节点,cur是父节点的左,pre.left = cur.right
    3)cur不是根节点,cur是父节点的右,pre.right = cur.right
  • cur.right == null–>要删除节点的右侧为空
    1)cur是根节点,root = cur.left
    2)cur不是根节点,cur是父节点的左,pre.left = cur.left
    3)cur不是根节点,cur是父节点的右,pre.right = cur.left
  • cur.left != null && cur.right != null–>要删除节点的左右均不为空
    1)找cur左子树的右叶子节点–>左子树的最大值–>最大值的右节点一定为null
    2)找cur右子树的左叶子节点–>右子树的最小值–>最小值的左节点一定为null
    3)不可以是左子树的左叶子节点(左子树最小值) or 右子树的右叶子节点(右子树最大值)

🌼cur.left == null–>要删除节点的左侧为空

cur是根节点,root = cur.right

cur不是根节点,cur是pre节点的左,pre.left = cur.righ

cur不是根节点,cur是pre节点的右,pre.right = cur.right


🌼cur.right == null–>要删除节点的右侧为空

cur是根节点,root = cur.left

cur不是根节点,cur是pre节点的左,pre.left = cur.left

cur不是根节点,cur是pre节点的右,pre.right = cur.left


相关文章
|
11天前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
8月前
|
Java
二叉排序树(java)
二叉排序树(java)
|
9月前
|
Java
java如何实现一个高效的二叉搜索树(BST)?请给出时间复杂度分析。
这段内容介绍了Java中使用AVL树实现高效二叉搜索树的方法。AVL树是一种自平衡树,节点子树高度差不超过1,确保操作时间复杂度为O(log n)。代码包括了`Node`类和`AVLTree`类,实现了节点、插入、删除、查找和平衡旋转等方法。通过旋转操作,维持树的平衡,保证了搜索效率。
58 6
|
9月前
|
Java BI
Java 实现二叉排序树(BST)
Java 实现二叉排序树(BST)
65 0
|
9月前
|
算法 C++ Java
Java每日一练(20230504) 位1的个数、移除元素、验证二叉搜索树
Java每日一练(20230504) 位1的个数、移除元素、验证二叉搜索树
40 0
Java每日一练(20230504) 位1的个数、移除元素、验证二叉搜索树
|
9月前
|
存储 Java Serverless
二叉搜索树 和 哈希表 (JAVA)
【1月更文挑战第1天】阿里云初体验 二叉搜索树 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除 哈希表 哈希冲突 闭散列 线性探测法 二次探测法 开散列 二叉搜索树又称二叉排序树,它具有以下性质的二叉树或空树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的每颗子树也分别为二叉搜索树 而哈希表是一种插入/删除/查找时间复杂度都是O(1)的数据结构,它的查询之所以也可以如此之快的的原因就是它在查找时不需要经过任何比较,直接一次从表中得到要搜索的元素。
66 0
二叉搜索树 和 哈希表 (JAVA)
|
9月前
|
Java
LeetCode题解-二叉搜索树中第K小的元素-Java
LeetCode题解-二叉搜索树中第K小的元素-Java
43 0
|
9月前
|
存储 算法 Java
230. 二叉搜索树中第K小的元素 --力扣 --JAVA
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
152 3
|
算法 Java
二叉搜索树及Java实现
二叉搜索树及Java实现
209 0
二叉搜索树及Java实现
|
2天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
35 14

热门文章

最新文章