LeetCode98 驗證二叉搜尋樹
阿新 • • 發佈:2020-11-20
最討厭寫資料結構了。但是不得不寫
這題意思就是確定一個二叉排序樹合不合法,我儲存了左子樹和柚子樹的最大最小值然後判斷一下
五連wa哭了
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: long long min(long long a, long long b) { if(a<b) return a; return b; } long long max(long long a, long long b) { if(a>b) return a; return b; } bool judgeTree(TreeNode *root, long long *minVal, long long *maxVal) { //*minVal = 100000, *maxVal = -100000; long long leftMin = 10000000000, leftMax = -10000000000; long long rightMin = 10000000000, rightMax = -10000000000; if(!root) return true; if(!judgeTree(root->left, &leftMin, &leftMax)) return false; printf("curnum = %d\n curLEFTmin = %d\n curLEFTmax = %d\n", root->val,leftMin,leftMax); if(!judgeTree(root->right, &rightMin, &rightMax)) return false; printf("curnum = %d\n curRmin = %d\n curRmax = %d\n", root->val,rightMin,rightMax); if(root->left) { *minVal = min(*minVal, leftMin); *maxVal = max(*maxVal, leftMax); if(leftMax>=root->val) return false; } if(root->right) { *minVal = min(*minVal, rightMin); *maxVal = max(*maxVal, rightMax); if(rightMin<=root->val) return false; } *minVal = min(*minVal, root->val); *maxVal = max(*maxVal, root->val); printf("curnum = %d\n curmin = %d\n curmax = %d\n", root->val,*minVal,*maxVal); return true; } bool isValidBST(TreeNode* root) { long long minVal = 10000000000, maxVal = -10000000000; return judgeTree(root, &minVal, &maxVal); } };