二叉树中的问题;需要帮助

你能帮我吗?我正在制作一个带有节点插入的二叉树。如何根据BST规则将新节点插入当前节点? 示例:首先root为空。 输入数量: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 );
    }  
  }
} 
    
已邀请:
你的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 {
        ....
    }
}
    
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
。哎呀。 :)     
添加到二叉搜索树的方法似乎不正确。 您需要阅读二进制搜索树以了解如何维护树的结构。 下面是一些代码,显示如何添加到二进制搜索树,但如果树不包含数据,我将其定义为空。
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);
            }
        }
    }
}
如果您有任何其他问题,请告诉我。     

要回复问题请先登录注册