首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过检查是否存在循环来确定二叉树有效性的函数

,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来实现。

深度优先搜索的实现思路如下:

  1. 创建一个辅助函数isValid(node, lower, upper),其中node为当前节点,lower和upper为当前节点允许的值的范围。
  2. 若当前节点为空,则返回True。
  3. 若当前节点的值不在范围内(lower > node.val or node.val > upper),则返回False。
  4. 递归调用isValid函数,检查当前节点的左子树和右子树。对于左子树,上界(upper)更新为当前节点的值减一,对于右子树,下界(lower)更新为当前节点的值加一。
  5. 若左子树或右子树的有效性检查结果为False,则返回False。
  6. 若通过以上所有检查,返回True。

以下是一个使用深度优先搜索实现的Python代码示例:

代码语言:txt
复制
class Solution:
    def isValidBST(self, root):
        def isValid(node, lower, upper):
            if not node:
                return True
            if node.val <= lower or node.val >= upper:
                return False
            return isValid(node.left, lower, node.val) and isValid(node.right, node.val, upper)
        
        return isValid(root, float('-inf'), float('inf'))

广度优先搜索的实现思路如下:

  1. 创建一个辅助函数isValid(node),其中node为当前节点。
  2. 创建一个队列,将根节点和该节点允许的值的范围(lower, upper)入队。
  3. 循环直到队列为空:
    • 出队当前节点和该节点允许的值的范围(lower, upper)。
    • 若当前节点为空,则继续下一次循环。
    • 若当前节点的值不在范围内(lower > node.val or node.val > upper),则返回False。
    • 将当前节点的左子节点和新的值范围(lower, node.val-1)入队。
    • 将当前节点的右子节点和新的值范围(node.val+1, upper)入队。
  • 若通过以上所有检查,返回True。

以下是一个使用广度优先搜索实现的Python代码示例:

代码语言:txt
复制
from collections import deque

class Solution:
    def isValidBST(self, root):
        if not root:
            return True
        
        queue = deque([(root, float('-inf'), float('inf'))])
        while queue:
            node, lower, upper = queue.popleft()
            if not node:
                continue
            if node.val <= lower or node.val >= upper:
                return False
            queue.append((node.left, lower, node.val-1))
            queue.append((node.right, node.val+1, upper))
        
        return True

以上是通过检查是否存在循环来确定二叉树有效性的函数的实现方式。该函数可以用于判断给定的二叉树是否是有效的二叉搜索树。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券