package array;
import java.util.Scanner;
class node<T>{
T data;
node<T> left;
node<T> right;
}
public class binarytree {
public static void main(String [] args){
node<Integer> root = null;
node<Integer> n = new node<>();
Scanner s = new Scanner(System.in);
root=create(s.nextInt());
System.out.println("root creates");
//root=insert(n,root);
for(int i =1;i<6;i++){
n=create(s.nextInt());
insert(n,root);
System.out.println(i+"th inserted ");
inorder(root);
System.out.println();
}
}
private static void inorder(node<Integer> root) {
if(root==null){
return;
}
inorder(root.left);
System.out.print(root.data+" ");
inorder(root.right);
return;
}
private static void insert(node<Integer> n, node<Integer> root) {
if(root.left==null&&root.right==null){//line 37
if(root.data>n.data){
root.left=n;
}
else{
root.right=n;
}
}
else if(root.data>n.data){
insert(n, root.left);//line 47
}
else{
insert(n, root.right);
}
return ;
}
private static node<Integer> create(int data) {
node<Integer> n = new node<>();
n.data=data;
n.left=n.right=null;
return n;
}
}
代码适用于正小整数,但是通过某些输入(例如:
)给出空指针异常2 -3 1 -44
然后停止并给出nullpointer异常。
然而,有这样的一些,它工作正常
6 4 3 2 1
堆栈追踪:
Exception in thread "main" java.lang.NullPointerException
at array.binarytree.insert(binarytree.java:37)
at array.binarytree.insert(binarytree.java:47)
at array.binarytree.insert(binarytree.java:47)
at array.binarytree.main(binarytree.java:21)
答案 0 :(得分:0)
当root.left == null
为false并允许root.right
失败时,插入中的if语句是短路的,然后在递归中向下传递root.right
,该递归为空。或者你的树是空的,根只是空的。
尝试重新构建
private static void insert(node<Integer> n, node<Integer> root) {
if (n == null) return;
if (root == null) {
// TODO: Set the root?
}
Integer data = n.data;
Integer rootData = root.data;
if (data < rootData) {
if(root.left == null){
root.left = n;
}
else{
insert(n, root.left);
}
}
else if(data >= rootData){
if (root.right == null) {
root.right = n;
} else {
insert(n, root.right);
}
}
}