Deepesh mhatre Ответов: 2

Бинарное дерево поиска с использованием рекурсии ?


Я создаю двоичное дерево поиска с помощью рекурсии , но есть одна вещь, которую я не могу понять. Я дал свой код вставки ниже, чего я не получаю , так это внутри метода insert() ниже , почему мы должны использовать root==insertNode(root,data) ? Я имею в виду , что знаю, что он вызовет следующий метод, но почему мы должны использовать "root=" ? Я попытался удалить его, что дает мне ошибку.
Пожалуйста объяснить.

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


    private Node insertNode(Node root,int data){

        Node newNode = new Node(data);

        if (root==null){
            root=newNode;
            return root;
        }

        if (data < root.data){
            root.left=insertNode(root.left,data);
        }else {
            root.right=insertNode(root.right,data);
        }
        return root;
    }


Что я уже пробовал:

Я попробовал поискать в google но не получил нужного ответа

Sandeep Mewara

о какой линии вы говорите. Ваш код говорит single '=', а ваш вопрос говорит о '==' (в контексте метода insert). Где же путаница?

[no name]

root=insertNode(корень,данные);
ЛИНИЯ 2

2 Ответов

Рейтинг:
2

Sandeep Mewara

Цитата:
root=insertNode(root,data); //строка 2

Вы были правы в этой части. Это не обязательно ставить root = и должно быть нормально просто позвонить insert вот и игнорируйте возвращение. От вас зависит, что вы хотите сделать с возвращаемым значением из метода - использовать его или игнорировать.

В вашем приведенном выше коде я не смог найти корень, определенный. Надеюсь, что это не связано с вашей проблемой.


Видите ли, я попробовал то же самое, и это работает, как и ожидалось:
public class JavaFiddle
{
    public static void main(String[] args)
    {
    
      insert(10);
      System.out.println("HelloWorld!");
    }
    
    public static void insert(int data){
        Node root=new Node(1);
        //root=insertNode(root,data);
        insertNode(root,data);
    }
    
    
    private static Node insertNode(Node root,int data){
    
        Node newNode = new Node(data);
    
        if (root==null){
            root=newNode;
            return root;
        }
    
        if (data < root.data){
            root.left=insertNode(root.left,data);
        }else {
            root.right=insertNode(root.right,data);
        }
        return root;
    }
    
    public static class Node
    {
        Node left;
        int data;
        Node right;
        
        Node(int data)
        {
            this.data = data;
        }
    }
}


Рейтинг:
0

CPallini

Цитата:
почему мы должны использовать root==insertNode(root,data) ?

Вы должны использовать
root=insertNode(root,data); // note the single '='
потому что родитель вновь вставленного узла должен быть обновлен ссылкой на сам вновь вставленный узел.