LeetCode - Validate Binary Search Tree

来源:互联网 发布:算法导论 22.3 10 编辑:程序博客网 时间:2024/06/07 10:36

题目描述:

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:

    2   / \  1   3
Binary tree [2,1,3], return true.

Example 2:

    1   / \  2   3
Binary tree [1,2,3], return false.


一开始的想法是遍历二叉树,判断每一个节点的值是否大于其左节点的值且小于右节点的值,但是这种做法可能出现某节点的右子树包含小于这个节点的值,但是右子树中的这个节点满足上述条件,例如:

    4    / \  1   6     / \    3   7
这是不满足BST的要求的,所以考虑用中序遍历得到数组,然后判断该数组是否为单增的,就可以判断是否为BST。

class Solution {public:vector<int> v;void DFS(TreeNode* root){if(root!=NULL){if(root->left!=NULL){DFS(root->left);}v.push_back(root->val);if(root->right!=NULL){DFS(root->right);}}else return;}    bool isValidBST(TreeNode* root){v.clear();DFS(root);if(v.size()==0) return true;bool isvalid=true;for(int i=0;i<v.size()-1;i++){if(v[i]>=v[i+1]) {isvalid=false;break;}}return isvalid;    }};


0 0