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

AVL树插入NullPointerException?

那安宁
2023-03-14

我有一个二进制搜索树插入方法,可以工作。我正在尝试添加一个Trinode方法,如果高度不平衡,可以平衡它。在我的插入方法中,在插入项之后,在插入方法的末尾,我有一个if语句来检查它是否高度平衡。如果是,则打印“高度平衡”。否则,它会打印出“notheight balanced”,然后对我刚刚插入的项目调用triNodeRestructure方法。当我运行代码时,它在调用triNodeRestructure(item)时给我一个空指针异常。它可以追溯到我的triNodeRestructure方法中的一行:

AVLNode<E> z = x.getParent().getParent();

我有一个setter为setPArent和getP的getter。这些是我唯一的父方法。

我按相应的顺序插入了50、49、48。基于此,z应该是50,因为x是我插入的最后一个节点,它是48。为什么我得到一个空指针异常?z不是null,所以这不应该发生。任何帮助都将不胜感激。

共有1个答案

苗信鸥
2023-03-14

在发布这个问题后不久,我就发现了问题所在。我忘了在我的插入方法中写一个setP的()行,它从来没有为插入的节点设置父节点。愚蠢的我。

 类似资料:
  • 本文向大家介绍在Javascript AVL树中插入节点,包括了在Javascript AVL树中插入节点的使用技巧和注意事项,需要的朋友参考一下 我们可以学习如何在AVL树中插入节点。AVL树中的插入与BST相同,只要我们在树上向下移动,我们只需在插入过程中执行一个额外的步骤,称为平衡树。 这需要计算我们之前已经看到的平衡因子。并且根据配置,我们需要调用适当的旋转方法。在以上说明的帮助下,这些都

  • 我最近在C。。然后我尝试创建一个AVL。。这样做的第一步。就是在每个节点中添加一个额外的组件bf(平衡因子)。。我是这样做的。 每次malloc在插入时为新节点分配地址。。。我将其信息部分分配给用户输入的值。。将左右指针设置为NULL。除此之外,它还将新节点的bf分配给0。。在插入第一个节点(即根节点)后,程序下次在malloc部分甚至无法为新节点分配内存。。。只要我去掉写着newnode的部分-

  • 我已经验证了avl插入代码的三个来源。在计算高度的所有情况下, 根高度=1最大值(self.getHeight(root.left),self。getHeight(根(右)) 上面给出了一行。 这是我的问题,为什么我们要取左子树和右子树的最大值,并在其中添加一个?如果我们将节点添加到具有最小高度的子树中呢?在这种情况下,两者将具有相同的高度H而不是H 1。 此高度增量应添加为, 我说得对吗?如果是

  • 找到一个示例AVL树,从树中删除单个(特定)值会导致从两个不同的节点开始重新平衡。 这是我的家庭作业问题。我不知道上面的问题是什么。有人能解释吗? 在两个不同的节点上重新平衡是否意味着需要两次旋转来修复树?

  • AVL树与自平衡二叉搜索树相同。AVL代表什么?这和发明者的名字有关吗?

  • 主要内容:二叉排序树转化为平衡二叉树,构建平衡二叉树的代码实现,总结上一节介绍如何使用二叉排序树实现动态 查找表,本节介绍另外一种实现方式—— 平衡二叉树。 平衡二叉树,又称为  AVL 树。实际上就是遵循以下两个特点的二叉树: 每棵子树中的左子树和右子树的深度差不能超过 1; 二叉树中每棵子树都要求是平衡二叉树; 其实就是在二叉树的基础上,若树中每棵子树都满足其左子树和右子树的深度差都不超过 1,则这棵二叉树就是平衡二叉树。 图 1 平衡与不平衡的二叉树及结点的