Java 二叉树问题;需要帮助吗

Java 二叉树问题;需要帮助吗,java,Java,你能帮我吗?我正在制作一个带有节点插入的二叉树。就BST规则而言,如何将新节点插入当前节点 示例:首先,根是空的 输入号码:50 这将显示成功 插入号码:40 成功插入到50的左子树中 插入号码:20 成功插入到40的左子树中 插入号码:80 已成功插入到50的右子树中 你能帮我吗?提前感谢您,希望您的积极响应 这是我的密码: class Node { public int num; public Node llink; public Node rlink; } public c

你能帮我吗?我正在制作一个带有节点插入的二叉树。就BST规则而言,如何将新节点插入当前节点

示例:首先,根是空的

输入号码:50

这将显示成功

插入号码:40

成功插入到50的左子树中

插入号码:20

成功插入到40的左子树中

插入号码:80

已成功插入到50的右子树中

你能帮我吗?提前感谢您,希望您的积极响应

这是我的密码:

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);
            }
        }
    }
}