二叉搜索树判定
- leetcode的原文鏈接
- 樹(shù)的定義
?C++版本
- 需要給每一個(gè)節(jié)點(diǎn)的數(shù)值劃分范圍
- 若任意節(jié)點(diǎn)的左子樹(shù)不空,則左子樹(shù)上所有結(jié)點(diǎn)的值均小于它的根結(jié)點(diǎn)的值;
- 任意節(jié)點(diǎn)的右子樹(shù)不空,則右子樹(shù)上所有結(jié)點(diǎn)的值均大于它的根結(jié)點(diǎn)的值;
- 任意節(jié)點(diǎn)的左、右子樹(shù)也分別為二叉查找樹(shù);
- 沒(méi)有鍵值相等的節(jié)點(diǎn)。
?
bool isValidBST_children(TreeNode* root,long min_value,long max_value){if (root == nullptr){return true;}if (root->val >= max_value || root->val <= min_value){return false;}return isValidBST_children(root->left,min_value,root->val) &&isValidBST_children(root->right,root->val,max_value);} bool isValidBST(TreeNode* root) {return isValidBST_children(root,INTMAX_MIN,INTMAX_MAX); }中序遍歷版本class Solution { public:bool isValidBST(TreeNode* root) {stack<TreeNode*> stack;long long inorder = (long long)INT_MIN - 1;while (!stack.empty() || root != nullptr) {while (root != nullptr) {stack.push(root);root = root -> left;}root = stack.top();stack.pop();// 如果中序遍歷得到的節(jié)點(diǎn)的值小于等于前一個(gè) inorder,說(shuō)明不是二叉搜索樹(shù)if (root -> val <= inorder) {return false;}inorder = root -> val;root = root -> right;}return true;} };作者:LeetCode-Solution 鏈接:https://leetcode-cn.com/problems/validate-binary-search-tree/solution/yan-zheng-er-cha-sou-suo-shu-by-leetcode-solution/ 來(lái)源:力扣(LeetCode) 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。?
總結(jié)
- 上一篇: 单基因gsea_筛到5分的核心基因以后你
- 下一篇: undefined reference