我正在尝试用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的值没有更新
您不应该设计具有大量输入参数的方法,因为测试会更痛苦。此外,没有必要将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;
}
}
从传递引用数据类型参数
引用数据类型参数(如对象)也通过值传递给方法。这意味着,当方法返回时,传入的引用仍然引用与以前相同的对象。但是,如果对象字段具有适当的访问级别,则可以在方法中更改它们的值。
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
}
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的程序是否相同?如果没有,插入和移除的步骤是什么?