我找到了很多代码来验证一个有效的二叉树,但我试图创建一个简单的二叉树,但它总是成立! 抱歉,我不太了解递归。
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def is_BST():
if root:
return all(is_BST1(root))
def is_BST1(curnode):
if curnode.right:
if curnode.right.val>curnode.val:
is_BST1(curnode.right)
else:
yield False
if curnode.left:
if curnode.left.val<curnode.val:
is_BST1(curnode.left)
else:
yield False
else:
yield True
root = TreeNode(8)
root.left = TreeNode(5)
root.right = TreeNode(14)
root.left.left = TreeNode(4)
root.left.right = TreeNode(6)
root.left.right.left = TreeNode(8)
root.left.right.right = TreeNode(7)
root.right.right = TreeNode(24)
root.right.right.left = TreeNode(25)
result = is_BST()
print(result)
你的主要问题是这一行:
is_BST1(curnode.right)
仅返回一个生成器,但不对其进行任何操作。你至少应该迭代那个生成器:
...
if curnode.right:
if curnode.right.val>curnode.val:
# iterate on the generator built from right node
for i in is_BST1(curnode.right):
yield i
else:
...
当然对左边的孩子也做同样的事...