微软面试题: 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 };