从二叉搜索树中删除节点时遇到问题。我想我还没有理解Java对象如何工作的基本原理

从二叉搜索树中删除节点时遇到问题。我想我还没有理解Java对象如何工作的基本原理,java,object,data-structures,binary-search-tree,Java,Object,Data Structures,Binary Search Tree,节点类:- public class Node { int data; Node left; Node right; Node(int data){ this.data = data; left = null; right = null; } } BST等级:- public class BST { Node root; BST(){ root = null; }

节点类:-

public class Node {
    int data;
    Node left;
    Node right;

    Node(int data){
        this.data = data;
        left = null;
        right = null;
    }
}
BST等级:-

public class BST {
    Node root;

    BST(){
        root = null;
    }

    void insertNode(int data){
        root = insertRecursive(data, root);
    }

    private Node insertRecursive(int data , Node root){
        if(root == null) return new Node(data);
        if(data < root.data) root.left = insertRecursive(data,root.left);
        if(data > root.data) root.right = insertRecursive(data,root.right);
        return root;
    }

    Node find(int data,Node root){
        return findRecursive(data,root);
    }

    private Node findRecursive(int data, Node root){
        if(data == root.data) return root;
        if(data < root.data) return findRecursive(data,root.left);
        if(data > root.data) return findRecursive(data, root.right);
        else return null;
    }

    Node delete(int data, Node root){
        Node toBeDeleted = find(data,root); 
        Node parent = parent(data,root);
        if(toBeDeleted.left == null && toBeDeleted.right == null) {
            toBeDeleted = null;
            return root;
        }

        else if(toBeDeleted.left == null || toBeDeleted.right == null){
            if(toBeDeleted.left == null){
                if(parent.left == toBeDeleted) parent.left = toBeDeleted.right;
                if(parent.right == toBeDeleted) parent.right = toBeDeleted.right;
            }
            else if(toBeDeleted.right == null ){
                    if(parent.left == toBeDeleted) parent.left = toBeDeleted.left;
                    if(parent.right == toBeDeleted) parent.right = toBeDeleted.left;
            }
            return root;
        }

        else {
            Node min = findMin(toBeDeleted.right);
            toBeDeleted = min;
            delete(min.data,min);
            return root;
        }
    }

    Node parent(int dataToBeFound,Node root){
        return parentHelper(find(dataToBeFound,root),root);
    }

    private Node parentHelper(Node nodeToBeFound, Node root){
        if(root == null ) return null;
        else {
            if(root.left == nodeToBeFound || root.right == nodeToBeFound) return root;
            else{
                if(nodeToBeFound.data < root.data) return parentHelper(nodeToBeFound,root.left);
                else return parentHelper(nodeToBeFound,root.right);
            }
        }
    }

    void levelOrder(Node root){
        Queue<Node> q = new LinkedList<>();
        q.add(root);
        while(!q.isEmpty()){
            Node node = q.poll();
            System.out.println(node.data);
            if(node.left != null ) q.add(node.left);
            if(node.right != null ) q.add(node.right);
        }
    }

    Node findMin(Node node){
        if(node.left == null) {
            return node;
        }
        else{
            return findMin(node.left);
        }
    }
}

删除后,我将返回与输出相同的BST。我知道我缺少一些关于对象如何工作或对象如何被引用的基本知识。我的问题是我不知道如何解决这个问题。我该怎么办?我应该创建一个新对象吗?还是怎样我不知道。

我认为这部分有问题:

if(toBeDeleted.left == null && toBeDeleted.right == null) {
        toBeDeleted = null;
        return root;
    }

因为您对父项不做任何操作。

因为我将其子项设置为null,父项的子项在默认情况下不会变为null吗?您只将某些局部变量设置为null,而不是父项的子项。
if(toBeDeleted.left == null && toBeDeleted.right == null) {
        toBeDeleted = null;
        return root;
    }