java - 如何填充 BST 并以 Inorder 方式打印它

标签 java static tree binary-search-tree

我正在尝试使用此代码填充 BST,然后以 InOrder 遍历格式打印它。但是根节点没有被填充编译,没有任何错误,输出是:“根为空”,那么如何更正此代码,以便我的 BST 被填充在节点根中。

我尝试将节点根设为静态,我认为可能无法从每个方法访问根节点,但它不起作用,尝试更改节点的名称,但它也不起作用。

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();



    }
}


输出应该是树的中序遍历。

最佳答案

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;
}

关于java - 如何填充 BST 并以 Inorder 方式打印它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56056485/

相关文章:

javascript - 使用搜索词过滤树结构 json 的 Javascript 函数。排除与搜索词不匹配的任何对象

javascript - 如何在 JavaScript 中制作最快的自下而上的树转换器?我应该自己管理内存吗?

java - 使用 Spring 注解读取文件属性

java - 创建项目时出现"Cannot install project facet"错误?

java - 在后台更新 JavaFX 窗口

c++ - 使用共享库引用全局指针的 Qt/C++ 单例静态方法

java - java中解析xml字符串

javascript - 使用 nginx/node 进行版本控制来提供静态文件的最佳方式

c# - 更改静态变量的值是不好的做法吗?

tree - 关于二叉树旋转