菜单驱动的Java程序实现二叉树搜索。无法获取树结构以添加根以外的节点(插入函数)
除了根之外,我无法永久添加更多节点。在insert函数中创建树对象后,在insert函数的下一个条目中,它将被置空,因此只有根对象存在。我找不到问题,快把我逼疯了。有人请帮助,如果您使用与我在代码中使用的相同的数据结构,这将是更好的菜单驱动的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; }
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;
}
}