Как заполнить BST, а также распечатать его Inorder способом - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь этот код заполнить BST, а затем распечатать его в формате обхода InOrder. Но корневой узел не заполняется при компиляции без каких-либо ошибок, и вывод: «root is empty», так как исправить этот код, чтобы мой BST заполнялся в корне узла.

Я пытался сделать Node root статическим. Я подумал, что это может быть причиной того, что корневой узел может быть недоступен для каждого метода, но он не работает, попытался изменить имя узла, но он также не работает.

import java.util.*;
import java.io.*;
import java.lang.*;

class Node{
    int data; Node left; Node right;
    public Node(int data) {
        this.data = data;
        left = null;
        right = null;

    }
}
public class insert_tree {
    static Node root;   

     insert_tree() //constructor
     { 
        root = null; 
     } 
    public void addNode(int value) { // public method is called by the object and this public method calls the private method in which the root is also passed.
        root = add(root, value);
    }
    private Node add(Node node, int value) {
        if(node == null) {
            return node;
        }
        if(value < node.data) {
            node.left = add(node.left, value);
        }       
        else if(value > node.data) {
            node.right = add(node.right, value);
        }
        else {
            return node;
        }
        return node;
    }

    private void inOrder(Node node) {
//      node = root;
        if(node != null) {
            inOrder(node.left);
            System.out.print(node.data + " ");
            inOrder(node.right);
        }
        else {
            System.out.print("root is empty");
        }
        //return null;
    }
    public void inorder() {
        inOrder(root);
    }
   private void printRoot(Node root) {
      System.out.println(root.data);
   }
   public void print() {
      printRoot(root);
   }
    public static void main(String args[]) {
        insert_tree obj = new insert_tree();
        obj.addNode(20);
        obj.addNode(14);
        obj.addNode(25);
        obj.addNode(10);
        obj.addNode(16);
        obj.addNode(25);
        obj.addNode(21);
        obj.addNode(30);
        //printing the tree
        obj.inorder();



    }
}


Выходные данные должны быть по обходу дерева по порядку.

1 Ответ

0 голосов
/ 09 мая 2019
public void addNode(int value) { // public method is called by the object and this public method calls the private method in which the root is also passed.
    root = add(root, value);
}
private Node add(Node node, int value) {
    if(node == null) {
        node = new Node(value);
    }
    else if(value == node.data) {
        node.data = value;
    }
    else if(value < node.data) {
        node.left = add(node.left, value);
    }
    else {
        node.right = add(node.right, value);
    }
    return node;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...