【C++】【LeetCode】98. Validate Binary Search Tree

来源:互联网 发布:网络维护外包费用 编辑:程序博客网 时间:2024/06/05 20:49

题目

Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than the node’s key.
The right subtree of a node contains only nodes with keys greater than the node’s key.
Both the left and right subtrees must also be binary search trees.
Example 1:
Binary tree [2,1,3], return true.
Example 2:
Binary tree [1,2,3], return false.

思路

这道题我自己的思路非常低效,因此介绍一个网友的思路。
对于每个节点来说,都有一个它一定要大于的节点和一个它一定要小于的节点,满足这个条件,这个节点才能算是BST中符合条件的一个节点。因此利用递归,传递minNode和maxNode,判断该节点是否符合条件。对于左子树的子根节点,它一定要小于它的父节点,而大于对于父节点来说的minNode(如果minNode存在)。对于右子数的子根节点,它一定要大于他的父节点,而小于对于父节点来说的maxNode(如果maxNode存在)。

代码

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    bool isValidBST(TreeNode* root) {        return isValidBST(root, NULL, NULL);    }    bool isValidBST(TreeNode* root, TreeNode* min, TreeNode* max) {        if (root == NULL) {            return true;        }        if (min != NULL && root->val <= min->val || max!= NULL && root->val >= max->val) {            return false;        }        return isValidBST(root->left, min, root) && isValidBST(root->right, root, max);    }};
原创粉丝点击