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

时间:2011-01-26 01:35:08

标签: java

你可以帮帮我吗?我正在制作一个带有节点插入的二叉树。如何根据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 );
    }  
  }
} 

3 个答案:

答案 0 :(得分:2)

你的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 {
        ....
    }
}

答案 1 :(得分:0)

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的一个分支。哎呀。 :)

答案 2 :(得分:0)

添加到二叉搜索树的方法似乎不正确。

您需要阅读二进制搜索树以了解如何维护树的结构。

下面是一些显示如何添加到二进制搜索树的代码,但如果树不包含任何数据,我将其定义为空。

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

如果您有任何其他问题,请告诉我。