这是一个类Trees
只是为了实现二叉搜索树,无法理解这是什么错误。
类Node是单独定义的,我从这里调用了默认构造函数:
public class Trees {
static Node root = null;
static void insert(int data, Node r)
{
if(r==null)
{
r = new Node();
r.data = data;
r.left = null;
r.right=null;
// System.out.println(root.data);
}
else
{
Node current;
current = r;
if(data >=current.data)
{
insert(data,current.right);
}
else if(data < current.data)
{
insert(data,current.left);
}
}
}
static void display(Node r)
{
if(r!=null)
{
display(r.left);
display(r.right);
System.out.print(r.data +" ");
}
}
public static void main(String[] args) {
insert(2, root);
insert(6, root);
insert(1, root);
insert(5, root);
display(root);
}
}
这可能有什么问题?
答案 0 :(得分:2)
public class Trees {
static Node root = null;
static Node insert(int data, Node r)
{
if(r==null)
{
r = new Node();
r.data = data;
r.left = null;
r.right=null;
return r;
// System.out.println(root.data);
}
else
{
Node current=r;
if(data >=current.data)
{
current.right= insert(data,current.right);
}
else if(data < current.data)
{
current.left=insert(data,current.left);
}
}
return r;
}
static void display(Node r)
{
if(r!=null)
{
display(r.left);
display(r.right);
System.out.print(r.data +" ");
}
}
public static void main(String[] args) {
root=insert(2, root);
root=insert(6, root);
root=insert(1, root);
root=insert(5, root);
display(root);
}
}
class Node
{
public int data;
public Node left;
public Node right;
}
此代码正常工作,如果要使用递归,则还必须为引用变量赋值。试试这段代码,这段代码也正常工作并打印输出。
I hope I helped you.
答案 1 :(得分:2)
问题在于,您的代码根目录从未分配给。这就是为什么它在返回r的代码中起作用并在另一个答案中分配给root。
static void insert(int data, Node r)
{
if(r==null)
{
r = new Node();
r.data = data;
r.left = null;
r.right=null;
// System.out.println(root.data);
}
....
}
如果块实际上没有做任何有用的事情。 “r”没有通过引用传递给函数,因此对“r”的赋值不会传播回根变量。