首页 > 编程语言 >对Java对象一点新的理解(记录错误)

对Java对象一点新的理解(记录错误)

时间:2022-11-17 11:23:33浏览次数:66  
标签:right Java temp 错误 记录 null root left

 

时间:2022/11/17

 

在做leetcode450:删除二叉搜索树中的节点时我写了如下代码:

 1 if(root.left != null && root.right != null){
 2     TreeNode temp = root.right;
 3 
 4     while(temp.left != null){
 5         temp = temp.left;
 6     }
 7 
 8     temp.left = root.left;
 9     root = root.right;
10 }else if(root.left != null && root.right == null){
11     root = root.left;
12 }else if(root.left == null && root.right != null){
13     root = root.right;
14 }else{
15     root = null;
16 }

其中root是遍历找到的要删除的节点,当输入值root=[5,3,6,2,4,null,7]时,最终得到的结果是root=[5,3,6,2,4,null,7,null,null,2],而不是正确的结果root=[5,4,6,2,null,nul,7],这说明上面的第9行,root=root.right并没有生效,即并没有改变二叉搜索树的结构,那为什么会这样呢?

根据之前对Java运行时数据区域的讲解,我们可以知道:局部变量是存储在虚拟机栈中的,而对象存放在堆中,所以这里的局部变量root就类似于C/C++中的指针,上面代码中的root=root.right只是改变了root的指向,并没有改变堆中对象的内容,所以二叉搜索树的结构并没有被改变。

在树中,不能通过直接让节点=的方式来改变树的结构,需要通过left和right=来改变树的结构。

 

标签:right,Java,temp,错误,记录,null,root,left
From: https://www.cnblogs.com/machi12/p/16898814.html

相关文章

  • 行为树参考记录
    写在前面在接到搭建“AI系统”工作任务时,我选择以行为树为基础搭建,以下记录作为实现参考。记录行为树的历史、定义、和状态机的对比:《AIforGames》书上解释的非常......
  • JavaScript语法逻辑运算符he三元运算符
    JavaScript语法_逻辑运算符 逻辑运算符:&&:与(短路与)||:或(短路或)!:非其他类型转boolean:1、number:0或NaN为假,其他为真2、string:除了空字......
  • Java基础
    Java基础语法1、注释、标识符、关键字注释单行注释//单行多行注释/*多行*/文档注释/**文档*/标识符和关键字Java所有的组成部分都需要名字。类名、变量名以及......
  • Java 中foreach()循环,增强for循环详解
    ​foreach循环简称增加for循环用于遍历数组,集合@Testpublicvoidtest2(){Collectioncoll=newArrayList();coll.add(123);coll.add("程......
  • Java中 多线程的创建与使用
    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,......
  • Java 中Map接口的详解
    一、.Map接口:双列数据,存储key-value键值对的数据的集合。Map接口的主要实现类:HashMap:作为Map接口的主要实现类,线程不安全,效率高,存储null的key和valueLinkedHashMap作为Ha......
  • Java中一维数组和二维数组的详解
    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,......
  • Java面向对象中 this关键字的详解
    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,......
  • Java 中Map接口及其实现子类HashMap,Hashtable,Properties,TreeMap类的详解
    前言:对应的代码如下publicclassMap_{publicstaticvoidmain(String[]args){//Map接口实现类的特点,使用实现类HashMap//1.Map与Collection并列......
  • Java 中Collections工具类的使用
    前言:Collections是一个操作Set,list和Map集合的工具类Collections工具类中常用的方法,下面我通过代码演示@Testpublicvoidtest1(){Listlist=newArrayList......