树的最大二叉搜索树

该博客介绍了如何在给定的二叉树中找到最大的二叉搜索子树。通过递归地计算每个节点子树的大小、最小值和最大值,可以确定当前节点是否构成最大二叉搜索树的一部分。提供的Python代码实现了一个解决方案,并给出了测试样例,输出了最大二叉搜索子树的根节点值749。
摘要由CSDN通过智能技术生成

Largest BST in a Binary Tree

树的最大二叉搜索树

问题描述
给定一个二叉树,找出其子树中最大二叉搜索树。

测试样例

# Input: 
     5
    / \
   6   7
  /   / \
 2   4   9
# Output: 
749
# 最大的二叉搜索树为
  7
 / \
4   9

内容首发于微信公众号IT信息教室,如果您想学习更多AI相关的技能,欢迎搜索关注或微信扫描下方二维码关注~~

在这里插入图片描述
参考代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class TreeNode:
  def __init__(self, value):
    self.left = None
    self.right = None
    self.value = value

  def __str__(self):
    # 前序遍历输出二叉树
    answer = str(self.value)
    if self.left:
      answer += str(self.left)
    if self.right:
      answer += str(self.right)
    return answer

class Solution:
  def largestBSTSubtree(self, root):
    self.maxSize = 0
    self.maxRoot = None

    def helper(root):
      # 返回一个元组 (size, minValue, maxValue) 表示当前结点对应子树的信息.
      if root is None:
        return (0, float('inf'), float('-inf'))
      left = helper(root.left)
      right = helper(root.right)
      if root.value > left[2] and root.value < right[1]:
        size = left[0] + right[0] + 1
        if size > self.maxSize:
          self.maxSize = size
          self.maxRoot = root
        return (size, min(root.value, left[1]), max(root.value, right[2]))
      else:
        return (0, float('-inf'), float('inf'))

    helper(root)
    return self.maxRoot

# Test Program
#     5
#    / \
#   6   7
#  /   / \
# 2   4   9
node = TreeNode(5)
node.left = TreeNode(6)
node.right = TreeNode(7)
node.left.left = TreeNode(2)
node.right.left = TreeNode(4)
node.right.right = TreeNode(9)
print(Solution().largestBSTSubtree(node))
# 749
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值