微软面试题: LeetCode 98. 验证二叉搜索树 出现次数:3

题目描述:

   验证一颗给定的二叉树是否为 二叉搜索树;

思路:

  对二叉树中序遍历,若遍历的序列是单调递增的,则是二叉搜索树;若遍历的每个节点都比前一个

节点大,则序列是单调递增;可以使用一个变量 long front 保存 前一个遍历的节点的值,front 在遍历之前

初始化为 LONG_MIN, 不能为 INT_MIN ,是因为测试用例中 二叉树的节点值可能为 INT_MIN 。

代码:

 1 class Solution {
 2 public:
 3     bool isValidBST(TreeNode* root) {
 4         // 对 root中序遍历,遍历到二叉树的所有节点都比前一个节点大
 5         //返回true,反之 false;
 6         front = LONG_MIN; //这里用 LONG_MIN 是因为 树中的节点值也可能是 INT_MIN
 7         return isValidBSTHelper(root);
 8     }
 9     
10     bool isValidBSTHelper(TreeNode* root)
11     {
12         if (root == nullptr)
13         {
14            return true;
15         }
16          bool is_left_valid = isValidBSTHelper(root->left);
17          if(root->val <= front)
18          {
19              return false;
20          }
21          front = root->val;
22          bool is_right_valid = isValidBSTHelper(root->right);
23          return is_left_valid && is_right_valid;
24     }
25 private:
26     //  int front;
27     long front;
28 };

 

posted @ 2021-03-29 20:40  谁在写西加加  阅读(44)  评论(0编辑  收藏  举报