我可以使用 yield 来获取嵌套函数中所有结果的结果吗?

问题描述 投票:0回答:1

我找到了很多代码来验证一个有效的二叉树,但我试图创建一个简单的二叉树,但它总是成立! 抱歉,我不太了解递归。

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)
python binary-search-tree
1个回答
0
投票

你的主要问题是这一行:

        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:
        ...

当然对左边的孩子也做同样的事...

© www.soinside.com 2019 - 2024. All rights reserved.