题目:原题链接(困难)
标签:树、二叉树、二叉搜索树
| 解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
|---|---|---|---|
| Ans 1 (Python) | O ( N ) O(N) O(N) | O ( N ) O(N) O(N) | 476ms (42.39%) |
| Ans 2 (Python) | |||
| Ans 3 (Python) |
解法一:
class Solution:
def __init__(self):
self.ans = 0
def maxSumBST(self, root: TreeNode) -> int:
self.dfs(root)
return self.ans
def dfs(self, node):
if not node:
return True, 0, float("inf"), float("-inf")
else:
# 遍历两棵子树
bool1, val1, l1, l2 = self.dfs(node.left)
bool2, val2, r1, r2 = self.dfs(node.right)
# 判断两棵子树是否符合二叉搜索树性质
if not bool1 or not bool2:
return False, -1, 0, 0
# 判断当前节点是否符合二叉搜索树性质
if node.val <= l2 or node.val >= r1:
return False, -1, 0, 0
l = l1 if node.left else node.val
r = r2 if node.right else node.val
val = val1 + node.val + val2
self.ans = max(self.ans, val)
return True, val, l, r
















