广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java基础之二叉搜索树的基本操作
  • 645
分享到

Java基础之二叉搜索树的基本操作

2024-04-02 19:04:59 645人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、二叉搜索树插入元素二、搜索指定节点三、删除节点方式一四、删除节点方式二五、运行结果一、二叉搜索树插入元素 class node { int v

一、二叉搜索树插入元素



     class node {
        int val;
        Node left;
        Node right;

        Node(int val) {
            this.val = val;
        }
    }
    public void insert(int key) {
        Node node = new Node(key);
        if (this.root == null) {
            root = node;
        }
        Node cur = root;
        Node parent = null;
        while (cur != null) {
            if (cur.val == key) {
                //System.out.println("元素已经存在");
                return;
            } else if (cur.val > key) {
                parent = cur;
                cur = cur.left;
            } else {
                parent = cur;
                cur = cur.right;
            }
        }
        if (key > parent.val) {
            parent.right = node;
        } else {
            parent.left = node;
        }

    }

二、搜索指定节点


 public boolean search(int key) {
        Node cur = root;
        while (cur != null) {
            if (cur.val == key) {
                return true;
            } else if (cur.val > key) {
                cur = cur.left;
            } else {
                cur = cur.right;
            }
        }

        return false;
    }

三、删除节点方式一


 public void removenode1(Node parent, Node cur) {
        if (cur.left == null) {
            if (cur == root) {
                root = cur.right;
            } else if (cur == parent.right) {
                parent.left = cur.right;
            } else {
                parent.right = cur.right;
            }
        } else if (cur.right == null) {
            if (cur == root) {
                root.left = cur;
            } else if (cur == parent.right) {
                parent.right = cur.left;
            } else {
                parent.left = cur.left;
            }
        } else {
            Node tp = cur;
            Node t = cur.right;
            while (t.left != null) {
                tp = t;
                t = t.left;
            }
            if (tp.left == t) {
                cur.val = t.val;
                tp.left = t.right;
            }
            if (tp.right == t) {
                cur.val = t.val;
                tp.right = t.right;
            }
        }

    }

    public void remove(int key) {
        Node cur = root;
        Node parent = null;
        while (cur != null) {
            if (cur.val == key) {
                removenode1(parent, cur);
              //removenode2(parent, cur);
                return;
            } else if (key > cur.val) {
                parent = cur;
                cur = cur.right;
            } else {
                parent = cur;
                cur = cur.left;
            }
        }
    }
  

四、删除节点方式二


 public void removenode2(Node parent, Node cur) {

        if (cur.left == null) {
            if (cur == root) {
                root = cur.right;
            } else if (cur == parent.right) {
                parent.left = cur.right;
            } else {
                parent.right = cur.right;
            }
        } else if (cur.right == null) {
            if (cur == root) {
                root.left = cur;
            } else if (cur == parent.right) {
                parent.right = cur.left;
            } else {
                parent.left = cur.left;
            }
        } else {
            Node tp = cur;
            Node t = cur.left;
            while (t.right != null) {
                tp = t;
                t = t.right;
            }
            if (tp.right == t) {
                cur.val = t.val;
                tp.right = t.left;
            }
            if (tp.left == t) {
                cur.val = t.val;
                tp.left = t.left;
            }
        }

    }

五、运行结果


 
class TestBinarySearchTree {
    public static void main(String[] args) {
        int a[] = {5, 3, 4, 1, 7, 8, 2, 6, 0, 9};
        BinarySearchTree binarySearchTree = new BinarySearchTree();
        for (int i = 0; i < a.length; i++) {
            binarySearchTree.insert(a[i]);
        }
        binarySearchTree.inOrderTree(binarySearchTree.root);
        System.out.println();
        binarySearchTree.preOrderTree(binarySearchTree.root);
        binarySearchTree.remove(7);
        System.out.println();
        System.out.println("方法一删除后");
        binarySearchTree.inOrderTree(binarySearchTree.root);
        System.out.println();
        binarySearchTree.preOrderTree(binarySearchTree.root);
    }
}

在这里插入图片描述
在这里插入图片描述

到此这篇关于Java基础之二叉搜索树的基本操作的文章就介绍到这了,更多相关二叉搜索树的基本操作内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java基础之二叉搜索树的基本操作

本文链接: https://www.lsjlt.com/news/126591.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java基础之二叉搜索树的基本操作
    目录一、二叉搜索树插入元素二、搜索指定节点三、删除节点方式一四、删除节点方式二五、运行结果一、二叉搜索树插入元素 class Node { int v...
    99+
    2022-11-12
  • java基础二叉搜索树图文详解
    目录概念直接实践准备工作:定义一个树节点的类,和二叉搜索树的类。搜索二叉树的查找功能搜索二叉树的插入操作搜索二叉树 删除节点的操作 - 难点性能分析总程序 - 模拟实现二叉搜索树和 ...
    99+
    2022-11-13
  • JAVA二叉树的基本操作
    目录记录二叉树的基本操作DEMO1、创建一个二叉树类2、然后创建二叉树的节点记录二叉树的基本操作DEMO 1、创建一个二叉树类 这里约束了泛型只能为实现了Comparable这个接口的类型。 public class BinaryT...
    99+
    2021-12-08
    JAVA二叉树的操作 JAVA二叉树
  • Java实现二叉树的基本操作详解
    目录1. 二叉树结点的构成2. 二叉树的遍历2.1 前序遍历2.2 中序遍历2.3 后序遍历3. 获取整棵二叉树的节点个数4. 获取二叉树叶子节点的个数5. 获取第K层节点的个数6....
    99+
    2022-11-13
    Java二叉树操作 Java二叉树
  • 如何在Java中操作二叉搜索树
    如何在Java中操作二叉搜索树?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、二叉搜索树插入元素     class&n...
    99+
    2023-06-15
  • C++二叉搜索树的操作有哪些
    本文小编为大家详细介绍“C++二叉搜索树的操作有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++二叉搜索树的操作有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。二叉搜索树概念与操作二叉搜索树的概念二...
    99+
    2023-06-29
  • Java中二叉树的基础概念是什么
    这篇文章主要讲解了“Java中二叉树的基础概念是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中二叉树的基础概念是什么”吧!1. 树型结构1.1概念树是一种 非线性 的数据结构,...
    99+
    2023-06-29
  • Java创建二叉搜索树,实现搜索,插入,删除的操作实例
    Java实现的二叉搜索树,并实现对该树的搜索,插入,删除操作(合并删除,复制删除)首先我们要有一个编码的思路,大致如下: 1、查找:根据二叉搜索树的数据特点,我们可以根据节点的值得比较来实现查找,查找值大于当前节点时向右走,反之向左走!2、...
    99+
    2023-05-30
    java 二叉搜索树 搜索
  • C语言实现BST二叉排序树的基本操作
    本文实例为大家分享了C语言实现BST二叉排序树的基本操作代码,供大家参考,具体内容如下 BST-二叉排序树的几个基本操作。 头文件声明与函数定义 #include <std...
    99+
    2022-11-12
  • 详解Java中二叉树的基础概念(递归&迭代)
    目录1.树型结构1.1概念1.2概念(重要)2.二叉树(重点)2.1概念2.2二叉树的基本形态2.3两种特殊的二叉树2.4二叉树的性质2.5二叉树的存储2.6二叉树的基本操作2.7二...
    99+
    2022-11-13
  • Java基础之JDBC的数据库连接与基本操作
    目录一、JDBC概述二、JDBC操作数据库、操作表步骤三、JDBC体系结构与JDBC API四、注册与加载驱动五、建立连接(Connection)六、使用PreparedStatem...
    99+
    2022-11-12
  • 剑指Offer之Java算法习题精讲字符串操作与数组及二叉搜索树
    题目一  解法 class Solution { public String reverseOnlyLetters(String s) { char[]...
    99+
    2022-11-13
  • Java基础之JDBC连接数据库与基本操作的示例分析
    小编给大家分享一下Java基础之JDBC连接数据库与基本操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java可以用来干什么Java主要应用于:1....
    99+
    2023-06-14
  • Pandas中DataFrame的基本操作之重新索引讲解
    目录Pandas DataFrame之重新索引1.reindex可以对行和列索引2.reindex插值处理Pandas DataFrame重置索引案例Pandas DataFrame...
    99+
    2022-11-11
  • Java OpenCV学习之Mat的基本操作详解
    目录使用OpenCV时你需要补充的知识Mat对象Mat划线Mat在己有图片上加圆圈ImageShowAddCircle.javaImageViewer.javaMat与Image互转...
    99+
    2022-11-13
  • java高并发之线程的基本操作详解
    目录新建线程终止线程线程中断等待(wait)和通知(notify)挂起(suspend)和继续执行(resume)线程等待线程结束(join)和谦让(yeild)总结新建线程 新建线...
    99+
    2022-11-12
  • java高并发之线程的基本操作有哪些
    本篇内容介绍了“java高并发之线程的基本操作有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!新建线程新建线程很简单。只需要使用new关...
    99+
    2023-06-25
  • java反射之方法反射的基本操作方法
    本文接上文“java反射之获取类的信息方法(推荐)”,利用反射(invoke)来获取一个类中的方法来执行。1、定义一个类,包含三个名称相同,参数不同的方法class A{ public void print(){ System.ou...
    99+
    2023-05-31
    java 反射 方法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作