leetcode No98. Validate Binary Search Tree

Question:

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.

判断是否为有效的二叉搜索树

Algorithm:

BST(二叉搜索树):

1、左子树上的所有结点的值均小于它的根结点的值

2、右子树上的所有结点的值均大于它的根结点的值

3、任意结点的左右子树也分别为二叉搜索树

4、没有键值相等的结点

两种解法(耗时差不多)

1、用定义的方法,要注意不是左孩子小于根节点,是左子树的所有结点。

2、中序遍历,如果是顺序的就是有效的

Accepted Code:(解法1,定义)

/**
 * 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:  //解法1
//即左<根<右,初始化时带入系统最大值和最小值,在递归过程中换成它们自己的节点值,用long代替int就是为了包括int的边界条件。
    bool isValidBST(TreeNode* root) {
        return helper(root,LONG_MIN,LONG_MAX);
    }
    bool helper(TreeNode* root,long left,long right)
    {
        if(root==NULL)
            return true;
        if(root->val<=left||root->val>=right)
            return false;
        return helper(root->left,left,root->val)&&helper(root->right,root->val,right);
    }
};

解法2(中序遍历)

/**
 * 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 {  //解法2,中序遍历,左根右
public:
    vector<int> res;
    bool isValidBST(TreeNode* root) {
        if(root==NULL)return true;
        inorder(root);
        for(int i=0;i<res.size()-1;i++)
            if(res[i]>=res[i+1])
                return false;
        return true;
    }
    void inorder(TreeNode* root)
    {
        stack<TreeNode*> s;
        while(root!=NULL||!s.empty())
        {
            if(root!=NULL)
            {
                s.push(root);
                root=root->left;
                continue;
            }
            else
            {
                root=s.top();
                s.pop();
                res.push_back(root->val);
                root=root->right;
            }
        }
    }
};

时间: 2024-10-13 21:58:22

leetcode No98. Validate Binary Search Tree的相关文章

【LeetCode】Validate Binary Search Tree

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

LeetCode OJ - Validate Binary Search Tree

题目: 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

[Leetcode][BST][Validate Binary Search Tree]

判断一颗树是不是二分查找树,非常经典基础的一个算法. 我很久之前第一次做的时候,是先求出来了树的前序遍历的结果,然后判断这个数组排序后是否和排序前相同,还要判断重复虾米的,很纠结的一种做法. 后来思考了一下怎么用递归的思路做,觉得应该根据定义返回两个子树的最大值和最小值,写了一会代码,发现好麻烦,不太对的样子. 后来看了题解,发现是用了一种反向的思维,把上下界从树的顶端传下去,而不是自下而上的约束.作者太机智了. 1 /** 2 * Definition for binary tree 3 *

[LeetCode 题解]: Validate Binary Search Tree

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

leetcode dfs Validate Binary Search Tree

Validate Binary Search Tree Total Accepted: 23828 Total Submissions: 91943My Submissions 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

leetcode 之 Validate Binary Search Tree

Validate Binary Search Tree 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 c

[Lintcode]95. Validate Binary Search Tree/[Leetcode]98. Validate Binary Search Tree

95. Validate Binary Search Tree/98. Validate Binary Search Tree 本题难度: Easy Topic: Binary Tree Description 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 contain

【LeetCode】Validate Binary Search Tree 解题报告

今天CSDN博客发生异常,折腾了大半天终于发出了这篇博文. [题目] 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

Java for LeetCode 098 Validate Binary Search Tree

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