98. 验证二叉搜索树(深搜)

  观察可以发现,只要进行一遍中序遍历就可以解决,主要的难点是要保存上一个节点的值与下一个节点进行比较,这可以设置一个全局变量,把它作为前一节点值,每次中序都可以让当前节点值和它进行比较,如果违反顺序规则,则直接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 };

原文地址:https://www.cnblogs.com/NiBosS/p/11945305.html