当前位置: 首页 > 知识库问答 >
问题:

如何让这个二叉查找树工作???(Java语言)

夏侯兴怀
2023-03-14
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);
        }
    }

我试图制作一个二叉搜索树(非递归),然后稍后访问并执行预序遍历,但是当我打印根目录时,我只得到 1 个元素。我认为所有的插入都有效,但是 root 只是第一次插入,它的左右不引用任何东西,我认为这就是为什么我只得到 1 个元素。如何将根引用到节点树的顶部?这是节点类顺便说一句

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个答案

郎鸿雪
2023-03-14

问题在于变量的引用。While循环直到节点变量上的值为空,然后将新节点分配给它。但是父<code>节点之间没有链接。左或节点。右和新的节点变量,因为它指定了nullvalue。因此,您将该值分配给一个没有链接到任何内容的变量,它将丢失。您需要将新节点直接分配给节点。左节点。右,如下图所示:

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;
            }
         }
      }
   }
}
 类似资料:
  • 接受的答案可以做一棵完美的树(这也是一棵完整的树)。虽然它不能在没有完美的情况下做成一棵完整的树。不过,这是我的要求最接近的答案。为了在不完美的情况下进行竞争,你可以去掉树最右边的叶子。 1.问题: 试图将< code >二叉查找树变成< code >完整的二叉查找树。我可以找到很多< code >完全二叉树的代码示例,但是没有< code >完全二叉查找树。这个插件的工作就像二叉查找树应该做的那

  • 主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:

  • 我正在努力实现二叉搜索树。完成实现所需的功能之一是重新平衡功能。 根据规范,该功能的工作方式如下: rebalance() 方法应创建一个平衡树,从而将偏度降低为零。平衡树是指在整个树中,左子树和右子树的大小相差不超过1(即,每个子树也是平衡的)。 为了平衡树,rebalance() 方法应反复将根值移动到较小的子树,并将最小/最大值从较大的子树移动到根,直到树平衡。然后,它应该以递归方式平衡两个

  • 我们已经看到了两种不同的方法来获取集合中的键值对。回想一下,这些集合实现了 map 抽象数据类型。我们讨论的 map ADT 的两个实现是在列表和哈希表上的二分搜索。在本节中,我们将研究二叉查找树作为从键映射到值的另一种方法。 在这种情况下,我们对树中项的确切位置不感兴趣,但我们有兴趣使用二叉树结构来提供高效的搜索。

  • 我正在研究一种寻找阳极父级的方法。我从根部开始,然后沿着叶子往下走,只要它们不是空的,不是孩子的节点。 下面是我的代码,它有点乱,因为我试着测试它看看哪里出了问题。

  • 我创造了这个二叉查找树。我使用循环和递归编写了两种形式的插入方法。递归代码虽然看起来是正确的,但并不工作,我想不出问题是什么。当我使用insertRecursion方法创建树时,leftChild和rightChild总是为null。 }