如何使这个二进制搜索树起作用??? (在Java中)

时间:2018-10-09 00:12:27

标签: java binary-search-tree insertion

public void insert(int data) {
        if (root == null) root = new AVLNode(data);
        else {
            AVLNode node = root;
            while (node != null) {
                if (node.data <= data) {
                    node = node.right;
                }
                else {
                    node = node.left;
                }
            }
            node = new AVLNode(data);
        }
    }
我试图做一个二叉搜索树(非递归),然后在以后访问,并做一个遍历遍历,但是当我打印root时,我只得到1个元素。我认为所有插入都起作用,但是root仅在其中插入了第一个插入,而其左侧和右侧没有引用任何内容,所以我认为这就是为什么im只得到1个元素的原因。我如何将root指向节点树的顶部? 这是节点类btw

class AVLNode
{
    AVLNode left, right;
    int data;

    /* Constructor */
    public AVLNode()
    {
        left = null;
        right = null;
        data = 0;
    }
    /* Constructor */
    public AVLNode(int n)
    {
        left = null;
        right = null;
        data = n;
    }
}

1 个答案:

答案 0 :(得分:1)

问题在于变量的引用。 While循环直到在node变量上达到空值,然后将新节点分配给它。但是父级node.leftnode.right与新的node变量之间没有链接,因为它分配了一个null值。因此,您将值分配给未链接任何变量的变量,它将丢失。您需要像下面的示例一样直接将新节点分配给node.leftnode.right

public void insert(int data) {
   if (root == null) {
      root = new AVLNode(data);
   } else {
      AVLNode node = root;
      AVLNode newNode = new AVLNode(data);
      while (node != null) {
         if (node.data <= data) {
            if (node.right == null) {
               node.right = newNode;
               node = null;
            } else {
               node = node.right;
            }
         } else {
            if (node.left == null) {
               node.left = newNode;
               node = null;
            } else {
               node = node.left;
            }
         }
      }
   }
}