我想写一个函数,显示给定的树是否为BinarySearch
这是我到目前为止写的:
class Node:
def _isBinary(self):
L=[]
if self.left is not None and self.right is not None:
if self.left.data>self.data or self.right.data<self.data:
L.append(1)
else:
L+=self.left._isBinary()
L+=self.right._isBinary()
else:
if self.left is not None:
if self.left.data>self.datat:
L.append(1)
else:
self.left._isBinary()
if self.right is not None:
if self.right.data<self.data:
L.append(1)
else:
self.right._isBinary()
return L
class tree:
def isBinary(self):
if self.root is None:
return
else:
return not 1 in self.root._isBinary(self.root.data)
(很明显,我刚刚报告了代码中感兴趣的部分) 这段代码运行得很好,但给出了错误的答案,例如,当一个数字(大于根)位于树的左侧,但它是一个较低数字的子代时:
99
/ \
8 888
\
100
它应该给我假,而不是返回真。我能做什么?(如果可能,在不完全更改原始代码的情况下?)
另一种方法是只按顺序遍历BST,然后检查它是否已排序。按顺序对BST的遍历进行排序
由于
all
的短路特性,您可以引入itertools.tee
以获得更好的性能有关
tee
如何工作的更多信息,请参考此答案Iterate a list as pair (current, next) in Python应采用以下方法:
在递归调用中传递那些已知的子树边界(
lo
和hi
)您可以按顺序遍历树,并检查值是否为升序。使用迭代器可以避免创建任何列表
相关问题 更多 >
编程相关推荐