我需要为最小堆二叉树编写一个递归来检查这棵树是否是最小堆。其中一个测试用例只是NONE。
无
是否被视为最小堆树并返回true
,或者无
是False
?
我问的原因是我会在某个时候到达叶子并且它们的节点是 None
并且如果基本情况为 True,那么它将返回 True
。
你一定是指最小堆。当我们处理任何树结构时,节点的子节点最常被初始化为无。原因之一是我们可以很容易地转义递归:
def find_node(node, data):
if root is None:
return
if root.data == data:
print "Node found"
find_node(node.left, data)
find_node(node.right, data)
class Node(object):
def __init__(self, data):
self.left = None
self.right = None
self.data = data
在您的例子中,您希望通过遍历树来检查它是否是最小堆。你会那样做的
def is_min_heap(root):
#.....check here and then do
return is_min_heap(root.left) and is_min_heap(root.right)
但这取决于你想如何处理它。任何一个没有子节点的节点都是最小堆或最大堆,但它没有任何意义。如果你想打电话
is_min_heap(无),
那么你可以自由地这样做,但如果你想说这是真的还是假的,这取决于你。
是的,None被认为是平均堆树。
我相信无类型将是完全正确的,因为它不违反最小堆树的定义。
很长一段时间以来,我一直在解决这项任务。我需要编写一个递归函数来检查每个节点是否小于其任何子节点。如果二叉树是最小堆,则返回 true,否则返回 false。 到目前为止我所拥有的:
我写了一个函数,如果给定的二叉树是二叉搜索树,则返回true,否则返回false。 我的功能对吗?
如何让prolog中的谓词返回值? 我需要找到一个树的节点,并检查它是否是一个最小堆。我猜是这样的:- 到目前为止我的代码是这个 输入的类型是- 输出应该为真。
QSTN:当它是叶节点时,为什么需要初始化ls=0或rs=0。考虑链接中给出的树,如果我们到达节点4,如果(node==NULL isLeaf(node))返回1;上面的代码将1(true)返回到调用它的函数,即节点10,类似地,右侧将true返回到节点10,因此我们现在可以进入下面的循环,因为如果(isSumTree(node->left)&&isSumTree(node->left)&&isS
我有一个btree类和一个insert函数,可以在树的宽度方向上插入节点。但树没有在右侧插入节点。 我正在创建根节点。insert函数将左、右节点正确插入根节点。 然后递归地,我尝试在左侧节点插入两个节点,在右侧节点插入两个节点。但在这一步中,所有节点仅添加到左侧。节点也会添加到无父节点。 我知道,我在插入函数中的最后一个语句中犯了一个错误。但是我尝试了很多组合,但是都导致了一些错误。
我有一个很严重的问题,就是在一棵树中重复搜索子树。 我试过了,但是。。。 似乎没有正确的形式。containsTree函数在找到与另一个节点不同的节点时停止搜索。 下面是两棵树的例子。 在这种情况下,当函数比较右边的子树和左边的子树时,当find等于父节点但它有不同的子节点时,它会停止搜索。我需要函数不要停止搜索,而是抛出这一点,搜索所有其他子节点及其子树。