333. Largest BST Subtree
来源:互联网 发布:select2 js默认选中空 编辑:程序博客网 时间:2024/05/09 07:23
这道题是 98. Validate Binary Search Tree 的进阶。最好先想到的方法就是对于每一个subtree判断他是不是valid BST,如果是的话计算size。
这样的解法问题就在于,时间复杂度太高了。
class Solution_largest_BST_simple{public: int largest (TreeNode* root){ if(isBST(root)) return 1+size(root->left)+size(root->right); else return max(largest(root->left), largest(root->right)); } int size(TreeNode* root){ if(root==nullptr) return 0; return size(root->left)+size(root->right)+1; } bool isBST(TreeNode* root){ return helper_valid(root, INT_MIN, INT_MAX); } bool helper_valid(TreeNode* root, int left_max, int right_min){ if(root==nullptr) return true; if(root->val>=right_min || root->val<=left_max) return false; return helper_valid(root->left, left_max, root->val) && helper_valid(root->right, root->val, right_min); }};
class data_dump{public: int min_val; int max_val; bool is_valid; int size; data_dump(){ min_val=INT_MIN; max_val=INT_MAX; is_valid=true; size=0; };};class Solution_largest_BST{public: int largest_bst(TreeNode* root){ data_dump res; res = helper_large_bst(root); return res.size; } data_dump helper_large_bst(TreeNode* root){ data_dump res; if(root==nullptr){ return res; } data_dump left_res = helper_large_bst(root->left); data_dump right_res = helper_large_bst(root->right); if(left_res.is_valid&&right_res.is_valid&& root->val>left_res.max_val&&root->val<right_res.min_val){ res.size=left_res.size+right_res.size+1; res.min_val=left_res.min_val; res.max_val=right_res.max_val; } else{ res.is_valid=false; res.size=max(left_res.size, right_res.size); } return res; }};
因为我没有买lc的会员,所以并不知道上段代码能不能ac。不过我自己跑的几个test case都过了。。。
0 0
- 333. Largest BST Subtree
- 333. Largest BST Subtree
- 333. Largest BST Subtree
- LeetCode 333. Largest BST Subtree
- LeetCode 333. Largest BST Subtree
- leetcode 333. Largest BST Subtree
- [leetcode] 333. Largest BST Subtree 解题报告
- Leetcode 333. Largest BST Subtree (Medium) (cpp)
- [Leetcode] 333. Largest BST Subtree 解题报告
- Largest BST Subtree
- Largest BST Subtree
- LeetCode 333. Largest BST Subtree(最大二叉搜索树)
- Medium 333题 Largest BST Subtree
- Largest Subtree Which is a Binary Search Tree (BST)
- Subtree
- Subtree
- subTree
- 二叉树-Largest BST in a tree
- android源码中的设计模式(1)--builder模式
- Android中后台任务的最佳实践
- Ubuntu 16.04 安装 NVIDIA CUDA Toolkit 7.5
- 实践 HTML5 的 CSS3 Media Queries
- LintCode Find Peak Element II(查找峰值II)
- 333. Largest BST Subtree
- C语言基础——%X(十六进制)的几种不同输出格式
- -bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory 错误解决方案
- leetcode #130 in cpp
- 模板类Vector【GeekBand 第六周】
- Android-->IPC(跨进程)通信Aidl的实现方法
- ActiveMQ源码解析(四):聊聊消息的可靠传输机制和事务控制
- 卡尔曼滤波之线性滤波,标量滤波
- Rotate List