一、题目描述
给出一棵root为根的二叉树,请你返回任意二叉搜索子树的最大键值和
二、理解题意
- 如何判断一棵子树是否是二叉搜索树?
- 如何记录一棵子树的键值和?
- 如何得到最大键值和?
三、Choose 数据结构及算法思维选择
四、后序遍历解法理解
本题关键点在于判断一棵子树是否是BST
• BST = 左子树是BST + 右子树是BST + 左子树最大值 < 根结点值 + 右子树最小值 >= 根结点值
解法递归三要素
- 确定函数等价关系式(参数,返回值)
• 参数是根节点+目标值,返回值 = (当前子树的键值和,最小结点值,最大结点值,是否是BST) - 确定结束条件
• 当前结点为空 - 函数主功能
• 先遍历左右子树,根据其返回值与当前节点值,更新函数返回值
五、代码实现
class Solution {
public int maxSumBST(TreeNode root) {
int[] max = new int[1];
traverse(root, max);
return max