当前位置: 首页 > 知识库问答 >
问题:

二叉树在java中的实现

云和同
2023-03-14

我正在尝试用java实现二叉树,下面是我的代码:

class TestClass {

    public static  void newnode(int a , Node root,){


             root = new  Node(a);
              System.out.println(root.data);   // Printing out 22

                                          }
    public static void main(String args[] ) throws IOException {


      Node root = null;
      newnode(22,root);
      System.out.println(root.data);  // Giving NullPointerException


    }
    }
    class Node{ 
        Node left ;
        Node Right;
        int data ;

        Node(int dataa){

            this.data = dataa;
        }
    }

我无法在我的树中插入新节点,root的值不会改变

当我调用newnode函数时,我得到了我的Root Node的正确值,但在main函数中,它给了我空点异常

为什么root的值没有更新

共有3个答案

狄睿
2023-03-14

您不应该设计具有大量输入参数的方法,因为测试会更痛苦。此外,没有必要将null传递给方法只是为了给它分配一个对象——这是糟糕的设计。

import java.io.IOException;

class TestClass {
    // This method is useless, use Factory Design Pattern if you want 
    // to create such solution with multiple variants
    public static Node newNode(int a) {
        return new Node(a);
    }

    public static void main(String args[]) throws IOException {
        Node root = newNode(22);
        System.out.println(root.getData());
    }
}

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

    public Node(int data) {
        this.data = data;
    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public Node getLeft() {
        return left;
    }

    public void setLeft(Node left) {
        this.left = left;
    }

    public Node getRight() {
        return right;
    }

    public void setRight(Node right) {
        this.right = right;
    }
}
万俟渊
2023-03-14

从传递引用数据类型参数

引用数据类型参数(如对象)也通过值传递给方法。这意味着,当方法返回时,传入的引用仍然引用与以前相同的对象。但是,如果对象字段具有适当的访问级别,则可以在方法中更改它们的值。

Java pass parameter作为pass by Value而不是by reference:所以您给定的代码:

public static void main(String args[] ) throws IOException {
  Node root = null;
  newnode(22,root); // you are passing root
  System.out.println(root.data);  // Giving NullPointerException because its pass by value
}

所以正确的方法可能是:

public static  Node newnode(int a , Node root){
    root = new  Node(a);
    System.out.println(root.data);   // Printing out 22
    return root;
}
public static void main(String args[] ) throws IOException {
    Node root = null;
    root = newnode(22,root);
    System.out.println(root.data);  // NO NullPointerException
}
堵琨
2023-03-14
class TestClass {

    public static  Node newnode(int a , Node root){
        root = new  Node(a);
        System.out.println(root.data);   // Printing out 22
        return root;
    }
    public static void main(String args[] ) throws IOException {
        Node root = null;
        root = newnode(22,root);
        System.out.println(root.data);  // Giving NullPointerException
    }
}

试试这个

 类似资料:
  • 我已经在“合并两棵二叉树”上工作了好几个小时了,我不明白为什么我的代码不起作用。树t1被指定为[1,3,2,5],树t2被指定为[2,1,3,null,4,null,7],我必须通过对重叠节点求和并尽可能避免null来合并这两棵树,因此结果应该是[3,4,5,5,4,null,7]。我不是像我应该的那样创建一棵新树,而是重写树t1以获得所需的结果。我的代码如下: 我的代码运行时没有错误,我的最终结

  • 我正在尝试将基于列表的树实现转换为基于数组的实现,其中父项位于第i个索引,左子项位于第2个索引,右子项位于第2i个索引。由于某种原因,转换会导致具有更大数量节点的树的数据丢失。我想知道在实现此功能时需要检查哪些所有边界条件。谢谢!

  • 我正在尝试创建一个无序二叉树。我们如何在无序二叉树中插入Treenode?应该是什么逻辑? 这里的插入是指将节点作为叶子插入。比如,如果我从根节点开始,然后遍历到右边的节点,现在我应该在哪里插入节点。 如果有人引用了UNORDERED二叉树[Not BST]实现,请提供。

  • 我有一个表示二叉树节点的树节点的树节点。 } 我有一个BinarySearchTree类 问题是当我创建一个子节点并设置父子链接时。父节点的值(我传递的节点对象)也会更新并引用子对象。 那不是我的本意。 我想创建一个treenode对象链,可以通过“根”treenode对象访问它。 但这并没有发生,我不明白我做错了什么。 我知道问题出在这个代码片段的逻辑上(不仅仅是为了在左边插入,也是为了在左边和

  • 二叉搜索树(BST)和二叉树(BT)中的插入有什么区别?我知道,在BST中,您将新节点的值与根进行比较,如果较小,则添加到其左侧,如果较大,则将其添加到根的右侧。BT的程序是否相同?如果没有,插入和移除的步骤是什么?