1373.二叉搜索子树的最大键值和

https://leetcode-cn.com/problems/maximum-sum-bst-in-binary-tree/

只要把前序遍历变成后序遍历,让 traval 函数把辅助函数做的事情顺便做掉

class Solution:
    maxSum = 0

    def maxSumBST(self, root: TreeNode) -> int:
        #遍历函数
        def traval(root):
            if root == None:
                return [1, sys.maxsize, -sys.maxsize, 0]
            left = traval(root.left)
            right = traval(root.right)
            #res[0] 记录以 root 为根的二叉树是否是 BST,若为 1 则说明是 BST,若为 0 则说明不是 BST;
            #res[1] 记录以 root 为根的二叉树所有节点中的最小值;
            #res[2] 记录以 root 为根的二叉树所有节点中的最大值;
            #res[3] 记录以 root 为根的二叉树所有节点值之和。
            res = [0]*4
            #当左右子树都为BST,且左子都比root小,右子都比root大
            if left[0]==1 and right[0] == 1 and root.val > left[2] and root.val < right[1]:
                res[0]= 1
                res[1] = min(left[1], root.val)
                res[2] = max(right[2], root.val)
                res[3] = left[3] + right[3] + root.val
                self.maxSum = max(self.maxSum, res[3])
            else:
                res[0] = 0
            return res
				#开始遍历
        traval(root)
        return self.maxSum

最后更新于