找到二叉树中的最大搜索二叉子树
题目来源:《程序员代码面试指南:IT 名企算法与数据结构题目最优解》
要点
- 二叉搜索树是指每一个节点构成的二叉树都符合根节点大于左边节点,小于右边结点。
- 如果一棵子树是二叉搜索树。假设这棵子树为上层节点的左子树,则该子树的最大值(最右侧)必须小于此节点,反之小于此节点。
解法
- 如果我们知道了某个子树的最大值与最小值,那么不管这个子树在 以上层节点为根节点 的左侧还是右侧,我们都能判断出它与此根节点能否构成二叉搜索树。
- 我们在构成二叉搜索树的时候,节点数是左右两侧节点数+当前节点数(1)
代码片段
public TreeNode biggestSubBST(TreeNode head) {
int[] ints = new int[3];//1. ints[0]存放节点数 ints[1]最小值 ints[2]最大值
return biggestSubBSTHelper(head, ints);//2. 求结果并返回
}
public TreeNode biggestSubBSTHelper(TreeNode head,