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