
观察可以发现,只要进行一遍中序遍历就可以解决,主要的难点是要保存上一个节点的值与下一个节点进行比较,这可以设置一个全局变量,把它作为前一节点值,每次中序都可以让当前节点值和它进行比较,如果违反顺序规则,则直接return退出,这里又可以设置一个flag来帮助我们剪枝。
LeetCode测试用例有一个是int类型的最小值 [-2147483648] ,这让我的初始节点值设置的不够小,查了一下资料可以用long long类型的LONG_MIN
1 /**
2 * Definition for a binary tree node.
3 * struct TreeNode {
4 * int val;
5 * TreeNode *left;
6 * TreeNode *right;
7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8 * };
9 */
10
11 //保存前一个节点的值
12 class Solution {
13 public:
14 long long pre=LONG_MIN; //卡边界(真的恶心)
15 bool flag=true;
16 bool isValidBST(TreeNode* root) {
17 if(!root||!flag) return 1; //剪枝
18 isValidBST(root->left);
19 if(root->val<=pre){
20 flag=false;
21 return 0;
22 }
23 else pre=root->val;
24 isValidBST(root->right);
25 return flag;
26 }
27 };