我试图做的方法,从二进制搜索树中删除节点,我知道我的编程逻辑是正确的,但我不能将我的焦点节点与节点的父母左孩子进行比较。它有时必须为空,我应该能够将其与对象进行比较,对吗?
这是我的代码:
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,因为它不好。
好的,让我们分析一下您的代码,因为您没有阅读注释:
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()等于null
OR节点。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
我试图打印我的二叉搜索树的每个节点的所有值和深度。我很难想出一种递归计算深度的方法。到目前为止,我有一种仅打印树的每个值的方法。我将不胜感激一些指导,因为我觉得我让它变得比应有的更难。