zoukankan      html  css  js  c++  java
  • 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 };

  • 相关阅读:
    Visual C++2005的IntelliSense问题
    R调用数据库的方式汇总
    Loading local data is disabled; this must be enabled on both the client and server sides 
    R的transform函数
    R连接mysql数据库(ODBC)
    mysql实例代码
    随笔20130105
    开端
    MeteoInfo
    火车软硬卧铺分布图
  • 原文地址:https://www.cnblogs.com/NiBosS/p/11945305.html
Copyright © 2011-2022 走看看