2023.7.9
这题有个陷阱,就是不能单纯的比较左节点小于中间节点,右节点大于中间节点就完事了。我们要比较的是 左子树所有节点小于中间节点,右子树所有节点大于中间节点。
我的思路是先用中序遍历所有节点,并将其放入数组中,再对判断改数组是否有序。 下面上代码:
class Solution {
public:bool isValidBST(TreeNode* root) {stack<TreeNode*> stk;vector<int> v;//中序遍历while(!stk.empty() || root){while(root){stk.push(root);root = root->left;}root = stk.top();stk.pop();v.push_back(root->val);root = root->right;}//判断数组是否有序for(int i=1; i<v.size(); i++){if(v[i-1] >= v[i]) return false;}return true;}
};