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

二叉查找树无法将节点与空值进行比较

竺翰海
2023-03-14

我试图做的方法,从二进制搜索树中删除节点,我知道我的编程逻辑是正确的,但我不能将我的焦点节点与节点的父母左孩子进行比较。它有时必须为空,我应该能够将其与对象进行比较,对吗?

这是我的代码:

public void deleteNode(Node node) {           
    if (node.getParent().left().root == node) {
        node.getParent().setLeft(null);
    } else {
        node.getParent().setRight(null);
    }
}

所以导致问题的是:

node.getParent().left().root == node

因为它给出了< code > Nullpointerexception 。但是我知道它应该是null,这是代码的要点。我也不想对< code > NullPointerException 使用try catch,因为它不好。

共有1个答案

张子墨
2023-03-14

好的,让我们分析一下您的代码,因为您没有阅读注释:

public void deleteNode(Node node) {           
    if (node.getParent().left().root == node) {//this is where you get NullPointerException
        node.getParent().setLeft(null);
    } else {
        node.getParent().setRight(null);
    }
}

为什么你得到一个NullPointerExc的行如果(node.get父().左(). root==节点)

你得到它是因为:<code>节点。getParent()等于nullOR节点。left()等于null。不能对null调用方法。假设节点。getParent()是null,在这种情况下,您将调用null.left()。这有意义吗?

更改代码以避免 NullPointerException

    if (node.getParent() != null) {
        if (node.getParent().left() != null && node.getParent().left().root == node)
            node.getParent().setLeft(null);
        else
            node.getParent().setRight(null);
    }

注:@user3790046我没有改变你的逻辑。我不知道这是否有意义,我只是添加了相对检查来避免NullPointerException。

 类似资料:
  • 几天来,我一直在使用二进制搜索树实现,我已经到了知道我的根正在通过使用我的“插入()”来填充的地步(当我使用Eclipse进行调试时,我可以看到这一点)。为什么我的其他节点不会被添加到树中? 这是我的BST课程: 这是我的Main(),最终我想在控制台中打印我的BST值,但首先我知道它们需要添加到树中: 公共类Main{

  • 我现在正在读一本关于从二叉搜索树中删除节点的书,书中描述的过程对我来说似乎不必要地复杂。 在1号情况下,如果我们删除40,它将替换为30;在 2 号情况下,如果我们删除 40,它将被替换 35。 但在书中,它说应该从要删除的节点的右子树中找到替换,这可能涉及一些复杂的操作。 我在这里遗漏了什么吗?请指出。

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

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

  • class Node(object): def __init__(self, data, left=None, right=None): self.data = data self.left = left self.right = right tree = Node(1, Node(3, Node(7, Node(0)), Node(6)), Node(2, Node

  • 我试图打印我的二叉搜索树的每个节点的所有值和深度。我很难想出一种递归计算深度的方法。到目前为止,我有一种仅打印树的每个值的方法。我将不胜感激一些指导,因为我觉得我让它变得比应有的更难。