Java 二叉树问题;需要帮助吗
你能帮我吗?我正在制作一个带有节点插入的二叉树。就BST规则而言,如何将新节点插入当前节点 示例:首先,根是空的 输入号码:50 这将显示成功 插入号码:40 成功插入到50的左子树中 插入号码:20 成功插入到40的左子树中 插入号码:80 已成功插入到50的右子树中 你能帮我吗?提前感谢您,希望您的积极响应 这是我的密码:Java 二叉树问题;需要帮助吗,java,Java,你能帮我吗?我正在制作一个带有节点插入的二叉树。就BST规则而言,如何将新节点插入当前节点 示例:首先,根是空的 输入号码:50 这将显示成功 插入号码:40 成功插入到50的左子树中 插入号码:20 成功插入到40的左子树中 插入号码:80 已成功插入到50的右子树中 你能帮我吗?提前感谢您,希望您的积极响应 这是我的密码: class Node { public int num; public Node llink; public Node rlink; } public c
class Node
{
public int num;
public Node llink;
public Node rlink;
}
public class BinaryTreeOperations
{
//public Node llink=null;
// public Node rlink=null;
private Node temp;
private Node current;
private Node root;
public boolean isEmpty()
{
return root==null;
}
public void insertNum(int n)
{
temp=null;
current=null;
Node newNode = new Node();
newNode.num=n;
newNode.llink=null;
newNode.rlink=null;
if(isEmpty())
{
root=newNode;
System.out.println("Successfully inserted!");
}
else
{
temp=root;
while(temp!=null)
{
current = temp;
root = current;
temp=null;
}
if(n<current.num)
{
current.llink=newNode;
//current.llink=temp;
System.out.println("inserted on the left subtree " +current.num);
}
else
{
newNode.rlink=newNode;
System.out.println("inserted on the right subtree "+current.num );
}
}
}
此循环将只运行一次。可能不是你想要的
在一个分支中,您将分配给current.llink,在另一个分支中,您将分配给newNode.rlink。哎呀 您的while循环似乎是错误的。您真正想要做的是从根开始遍历树,直到到达作为新节点父节点的节点。在下面,您没有进行任何遍历或检查以找到新节点的位置。这才是你真正需要做的
while(temp!=null) {
current = temp;
root = current;
temp=null;
}
应该是这样的:
while(parent not found) {
if (new node is smaller than current) {
if (current has left child) {
assign left child to current and loop
} else {
make current the parent of the new node
}
} else {
....
}
}
您添加到二元搜索树的方法似乎不正确 您需要阅读二进制搜索树,以了解如何维护树的结构 下面是一些代码,展示了如何添加到二进制搜索树中,但我将树定义为空,如果它不包含任何数据
public boolean isEmpty() {
return data == null;
}
代码的其余部分非常简单,应该可以帮助您了解如何添加到树中以维护顺序
public boolean add(Comparable target) {
if(isEmpty()) {
setData(target);
this.setLeftTree(new BinarySearchTree());
this.setRightTree(new BinarySearchTree());
return true;
} else {
int comparison = getData().compareTo(target);
if(comparison == 0)
return false;
else {
if(comparison < 0) {
return getRightTree().add(target);
} else {
return getLeftTree().add(target);
}
}
}
}
如果您还有其他问题,请告诉我。这是家庭作业吗?另外:到目前为止,您的代码有什么问题吗?您好,谢谢您的回复。我是这里的新手,如果我在发布时出错,我向您道歉……这是我的错误homework@jemz,不用担心,这个社区喜欢将家庭作业标记为家庭作业,这样未来的答案就可以提供更多的解释,而不仅仅是代码。这是SO社区的一件大事,这里的人们真诚地希望帮助理解,而不仅仅是完成作业。对于家庭作业问题,我只想指出代码中的问题——有一半的时间学生盲目地盯着代码寻找问题,这通常是徒劳无益的-但一旦发现问题,我们可以开始解决问题,这通常是有成效的。好的,先生,我会再次发布我要编辑我的代码…谢谢你先生,先生,我很困惑,如果电流已经离开了孩子,我该如何编码{将左撇子指定给当前和循环,以及先生,我如何能像您在回答中那样将我的代码放在帖子中sir@jemz,编辑你自己的文章,并输入你的代码;如果你在每行前面加上四个空格,它的格式就会很好。如果你的文本编辑器太难做到这一点,就把它留下吧,我相信其他人会在几秒钟内把它修好的先生,我很困惑,如果电流离开了孩子,你能帮我一下吗?先生,我真的不知道,你能出示代码吗?这是故意用伪代码写的,因为这是一个家庭作业问题:@ryanprayogo先生,谢谢你的回答,只是为了澄清ifcurrent==current.llinkis这是他的意思吗?@ryanprayogo是的,先生,我不明白他是一个家庭作业,但我有2天的时间在我们学校提交这个练习…我真的需要你的帮助,先生…@jemz二叉树节点最多有两个孩子。一个左孩子和一个右孩子。如果我们问自己一个节点有左孩子吗?我们会检查指向左孩子的指针是否有非空值。在代码中,这将是最新的。llink!=null。先生,你能帮我写代码吗?因为我的老师想要他给我密码。然后我们就提供密码。请帮我提前谢谢你,希望你能给予积极的回应
public boolean isEmpty() {
return data == null;
}
public boolean add(Comparable target) {
if(isEmpty()) {
setData(target);
this.setLeftTree(new BinarySearchTree());
this.setRightTree(new BinarySearchTree());
return true;
} else {
int comparison = getData().compareTo(target);
if(comparison == 0)
return false;
else {
if(comparison < 0) {
return getRightTree().add(target);
} else {
return getLeftTree().add(target);
}
}
}
}