二叉搜索树树实现,程序在eclipse中终止。简单的插入和显示操作

时间:2016-03-15 12:16:38

标签: java data-structures tree binary-tree

这是一个类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);

    }

}

这可能有什么问题?

2 个答案:

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

此代码正常工作,如果要使用递归,则还必须为引用变量赋值。试试这段代码,这段代码也正常工作并打印输出。

Output Of the code

          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”的赋值不会传播回根变量。