BM34. 判断是不是二叉搜索树
描述
示例1
输入:
{1,2,3}
输出:
false
说明:
如题面图1示例2
输入:
{2,1,3}
输出:
true
说明:
如题面图2C++ 解法, 执行用时: 6ms, 内存消耗: 1200KB, 提交时间: 2021-11-19
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return bool布尔型 */ long pre = INT_MIN; bool isValidBST(TreeNode* root) { // write code here if(root==nullptr) { return true; } if(root->left!=nullptr) { if(!isValidBST(root->left)) return false; } if(root->val <= pre) { return false; } pre = root->val; if(root->right!=nullptr) { if(!isValidBST(root->right)) return false; } return true; } //函数目的为找到该子树上的最值 // int dfs(TreeNode * root, bool max) { // int leftmax = INT_MIN; // int rightmin =INT_MAX; // if(root->left != nullptr) // leftmax = dfs(root->left, true); // if(root->right != nullptr) // rightmin = dfs(root->right, false); // if(max) { // } // } };
C++ 解法, 执行用时: 6ms, 内存消耗: 1228KB, 提交时间: 2021-11-25
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return bool布尔型 */ bool isValidBST(TreeNode* root) { if(nullptr==root) { return true; } if(root->left && root->val<root->left->val) { return false; } if(root->right && root->val>root->right->val) { return false; } return isValidBST(root->left) && isValidBST(root->right); } };
C++ 解法, 执行用时: 6ms, 内存消耗: 1236KB, 提交时间: 2022-07-05
static const auto io_sync_off = []() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pRoot TreeNode类 * @return TreeNode类 */ bool isValidBST(TreeNode* root) { if (root == nullptr) { return true; } if (!isValidBST(root->left)) { return false; } if (root->val <= pre) { return false; } pre = root->val; return isValidBST(root->right); } private: int pre = INT_MIN; };
C++ 解法, 执行用时: 6ms, 内存消耗: 1244KB, 提交时间: 2022-05-17
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); // std::cout.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return bool布尔型 */ int pre = INT_MIN; bool isValidBST(TreeNode* root) { // write code here if(root == nullptr) return true; if(!isValidBST(root->left)) return false; if(root->val <= pre) return false; pre = root->val; if(!isValidBST(root->right)) return false; return true; } };
C++ 解法, 执行用时: 6ms, 内存消耗: 1388KB, 提交时间: 2022-05-28
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: bool isValidBST(TreeNode* root) { stack<TreeNode*>st; TreeNode* c=root; TreeNode* p=NULL; while(c||!st.empty()) { if(c) { st.push(c); c=c->left; } else { c=st.top(); st.pop(); if(p&&p->val>=c->val) return false; p=c; c=c->right; } } return true; } };