首页 > 编程语言 >JAVA 实现 - 二叉树(二)

JAVA 实现 - 二叉树(二)

时间:2023-12-30 10:57:39浏览次数:41  
标签:node TreeNode 实现 value int 二叉树 key JAVA public

二叉搜索树

二叉搜索树/二叉查找树/二叉排序树

特点:

  • 树节点增加key属性,用来比较谁大谁小,key不可以重复
  • 对于任意一个树节点,它的key比左子树的key都大,同时也比右子树的key都大
/**
 * 二叉搜索树
 */
public class BSTree1 {

    public  TreeNode root;

    public static class TreeNode {
        int key;  //节点的健
        Object value; //节点的值
        TreeNode left;
        TreeNode right;

        public TreeNode(int key) {
            this.key = key;
        }

        public TreeNode(int key, Object value) {
            this.key = key;
            this.value = value;
        }

        public TreeNode(int key, Object value, TreeNode left, TreeNode right) {
            this.key = key;
            this.value = value;
            this.left = left;
            this.right = right;
        }
    }
}

查找元素 - 递归实现

public class BSTree1 {
  
  ...

  public Object get(int key) {
    return doGet(root, key);
  }

  private Object doGet(TreeNode node, int key) {
      if (node == null) { //没找到结束递归
          return null;
      }

      if (key < node.key) { //向左找
          return doGet(node.left, key);
      } else if (key > node.key) { //向右找
          return doGet(node.right, key);
      } else { //找到了
          return node.value;
      }
  }
}

查找元素 - 非递归实现

public class BSTree1 {

  ...

  public Object get(int key){
      TreeNode node = root;
      while(node != null){
          if (key < node.key){ //向左
              node = node.left;
          }else if (key > node.key){ //向右
              node = node.right;
          }else{
              return node.value;
          }
      }

      return null;
  }
}

标签:node,TreeNode,实现,value,int,二叉树,key,JAVA,public
From: https://www.cnblogs.com/czzz/p/17936123.html

相关文章

  • 算法学习Day17二叉树迭迭迭迭代
    Day17迭迭迭迭代ByHQWQF2023/12/28笔记110.平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树_每个节点_的左右两个子树的高度差的绝对值不超过1。示例1:输入:root=[3,9,20,null,null,15,7]输出:true递归法......
  • java-关键字与方法(四)
    trim() 方法:trim() 方法用于去除字符串两端的空格或空白字符。示例:Stringstr="HelloWorld";StringtrimmedStr=str.trim();//trimmedStr的值为"HelloWorld"在上面的例子中,trim()方法去除了字符串str两端的空格,返回结果为"HelloWorld"。concat() ......
  • java-关键字与方法(三)
    toUpperCase() 方法:toUpperCase() 方法将字符串中的所有字符转换为大写字母形式。示例:Stringstr="HelloWorld";StringupperCaseStr=str.toUpperCase();//upperCaseStr的值为"HELLOWORLD"在上面的例子中,toUpperCase()方法将字符串str中的所有字符转换为大写......
  • Java 读写锁 之 锁降级
    锁降级: 是指保持住当前的写锁(已拥有),再获取读锁,随后释放写锁的过程。1.  锁降级的用途锁分为读锁(共享锁)、写锁(排他锁)两种:一个线程获取了写锁,其他线程无法获取写锁、读锁,进行阻塞;一个线程获取了读锁,其他线程无法获取写锁(进行阻塞),但是可以获取读锁;如果只使用写锁,那么释放写锁之......
  • JVM 创建 Java 对象
    JVM 创建Java对象的流程:类的加载,内存分配、对对象进行必要的设置、执行<init>方法初始化。1. JVM 创建Java对象使用new关键字可以创建一个类的对象。new 指令在虚拟机中的执行操作:类的加载:首先在常量池(方法区中)去检查这个指令的参数是否能在常量池中定位到这个类的符......
  • Java 并发工具类之 Semaphore
    Semaphore 控制访问特定资源的线程数量,新建规定数量的许可证,获得许可证可以继续执行,未获得需要阻塞,执行完成归还许可证,这样其余的线程(未获得许可证)才可以执行。例如:Semaphore用于流量控制,例如只有10个数据库连接,可以用Semaphore控制只有10个线程访问数据库,这样就不会报错无法获取......
  • Java线程池的学习
    线程池有如下四个优点:降低资源消耗: 重用已经创建的线程, 线程的创建和销毁需要消耗计算机资源,特别是在有大量创建线程请求且线程的处理过程是轻量级的,例如:大多数的服务器。提高响应速度:重用已经创建的线程。提高线程的稳定性:可创建的线程数量是由有限制的,限制值是有多个因素制约,例......
  • Java 中的继承
    继承:可以基于已存在的类构造一个新类,继承已存在的类就是复用(继承)这些类的方法和域,在此基础上,还可以添加一些新的方法和域。1. 继承性 继承性: 把多种有着共同特性的多的类事物抽象成一个类,这个类就是多个类的父类。父类的意义在于可以抽取多个类的共性,代码复用,减少代码量。例:三个......
  • Java中的抽象类
    抽象类必须使用abstract关键声明,例如抽象类MyAbstractStudy:publicabstractclassMyAbstractStudy{}不能使用抽象类创建对象。抽象类中可以没有抽象方法。抽象方法必须为public或者protected,缺省情况下为public。抽象类的子类必须实现父类的抽象方法,如果没有则需要声明子类也为ab......
  • Java8 原子类 AtomicInteger 源码阅读
    AtomicInteger 是用 CAS(Compre And Swap,乐观锁)构造的一个 原子类。1. CAS CAS(CompareandSwap)比较并替换,CAS是实现乐观锁的一个重要操作。CAS是一个硬件指令,保证是原子操作,Java中通过UnSafe来实现。详细可一下我的这篇博文:传送。CAS 的基本步骤:执行函数CAS(V,E,N......