菜单驱动的Java程序实现二叉树搜索。无法获取树结构以添加根以外的节点(插入函数)

菜单驱动的Java程序实现二叉树搜索。无法获取树结构以添加根以外的节点(插入函数),java,data-structures,binary-search-tree,Java,Data Structures,Binary Search Tree,除了根之外,我无法永久添加更多节点。在insert函数中创建树对象后,在insert函数的下一个条目中,它将被置空,因此只有根对象存在。我找不到问题,快把我逼疯了。有人请帮助,如果您使用与我在代码中使用的相同的数据结构,这将是更好的 import java.util.Scanner; class tree { int x; tree left=null; tree right=null; }

除了根之外,我无法永久添加更多节点。在insert函数中创建树对象后,在insert函数的下一个条目中,它将被置空,因此只有根对象存在。我找不到问题,快把我逼疯了。有人请帮助,如果您使用与我在代码中使用的相同的数据结构,这将是更好的

    import java.util.Scanner;

    class tree

    { 
          int x;

           tree left=null;

        tree right=null;
     }

       class bst28
        {
           public static tree root=null;

            public static void main(String[] args)
            {  
               bst28 bl=new bst28();
               int ch,y;
                 Scanner scn=new Scanner(System.in);
               do{
                   System.out.println("Menu:\n1.Insert\n2.Search");   System.out.println("\n3.In-order-traversal\n4..Exit:");
                 ch=scn.nextInt();
                switch(ch)
                 {
                  case 1:System.out.println("Enter the element to insert :");
                 y=scn.nextInt();
                 bl.insert(y);
                     break;
          case 2:System.out.println("Enter the element to search for :");
                y=scn.nextInt();
                bl.search(y);
                     break;
          case 3:  bl.inorder(bl.root);
                     break;

          default:break;  
       }
      }while(ch!=4);

   }

        void insert(int a) 
        {
            tree temp=new tree();
           temp.x=a;
            boolean val=true;
            if(root==null)
            {  
               root=new tree();
                 root=temp;

          return;
       }
        System.out.println(root.x);
       tree current=new tree();
       current=root;
       while(val)
        {
           if(a<current.x)
            { System.out.println(current.x);
                 System.out.println("Trav to left");
              current=current.left;
              if(current==null)
               {  
                     System.out.println("Node currently null");
                  current=new tree();
                  current=temp;
                  System.out.println("Entered left of a node");
                  System.out.println(current.x);
                  val=false;
                }
            }
           else if(a>current.x)
             {
               System.out.println("Trav to right");
             current=current.right;
              if(current==null)
               {  
                  System.out.println("Node currently null");
                 current=new tree();
                 current=temp;
                 System.out.println("Entered right of a node");
                 System.out.println(current.x);
                  val=false;
                }
              }
              else
                 {
                   System.out.println("Value exists in the tree\n");
                   val=false;
                 }
        }
      }

         void search(int a)
           {
               if(root==null)
                {
                    System.out.println("Empty tree !");
                    return;   

                 } 

                 tree current=new tree();
                  current=root;
                  while(current!=null)
                   {
                       if(a==current.x)
                         {
                           System.out.println("FOund !");
                            return;               
                           }
                           else if(a<current.x)
                           {
                           current=current.left;
                          }
                        else
                       {
                          current=current.right;
                        }   

                   } 
               System.out.println("Not Found !");
            } 

          void inorder(tree temp)
          {
             if(temp!=null)
            {
               inorder(temp.left);
                  System.out.println("Visited node :"+temp.x);
               inorder(temp.right);
               }

             }



          }`
import java.util.Scanner;
类树
{ 
int x;
树左=空;
树右=空;
}
bst28级
{
公共静态树根=null;
公共静态void main(字符串[]args)
{  
bst28 bl=新的bst28();
int-ch,y;
扫描仪scn=新扫描仪(System.in);
做{
System.out.println(“菜单:\n1.Insert\n2.Search”);System.out.println(“\n3.按顺序遍历\n4..Exit:”);
ch=scn.nextInt();
开关(ch)
{
案例1:System.out.println(“输入要插入的元素:”);
y=scn.nextInt();
bl.插入(y);
打破
案例2:System.out.println(“输入要搜索的元素:”);
y=scn.nextInt();
bl.search(y);
打破
案例3:bl.inoder(bl.root);
打破
默认:中断;
}
}而(ch!=4);
}
空白插入(INTA)
{
树温度=新树();
温度x=a;
布尔值=真;
if(root==null)
{  
根=新树();
根=温度;
返回;
}
System.out.println(root.x);
当前树=新树();
电流=根;
while(val)
{
if(acurrent.x)
{
System.out.println(“Trav to right”);
current=current.right;
如果(当前==null)
{  
System.out.println(“节点当前为空”);
当前=新树();
电流=温度;
System.out.println(“节点的输入权限”);
System.out.println(当前x);
val=假;
}
}
其他的
{
System.out.println(“值存在于树中\n”);
val=假;
}
}
}
无效搜索(INTA)
{
if(root==null)
{
System.out.println(“空树!”);
返回;
} 
当前树=新树();
电流=根;
while(当前!=null)
{
如果(a==current.x)
{
System.out.println(“FOund!”);
返回;
}

否则,如果(a您没有将新子树(我们称之为“节点”,因为它只包含1个元素)关联到现有树。您正在创建节点,向下移动树,当您发现当前节点为空时,将新节点关联到当前节点。您必须领先一步,意思是:在向下移动树之前(向左或向右)检查(左/右)子树是否为null,并相应地执行操作。 因此,守则:

if(a<current.x)
    { System.out.println(current.x);
         System.out.println("Trav to left");
      current=current.left;
      if(current==null)
       {  
             System.out.println("Node currently null");
          current=new tree();
          current=temp;
          System.out.println("Entered left of a node");
          System.out.println(current.x);
          val=false;
        }
    }

if(请发布通过编译的实际代码,以及一些适当的缩进也会有所帮助。在Java中:类的名称应该以大写字母开头(这不会解决您的问题,但您应该学会这样做)@Eran我发布的代码编译得很好,没有错误。@LisaMM,我不是java程序员,只是为了我大学的数据结构实验室
if(a<current.x)
    { System.out.println(current.x);
         System.out.println("Trav to left");

      if(current.left!=null)
      {
          current=current.left;
          System.out.println("Entered left of a node");
          System.out.println(current.x);
      } 
      else
       {  
             System.out.println("Node currently null");
          current.left=temp;
          val=false;
        }
    }