设为首页 加入收藏

TOP

leetcode - Validate Binary Search Tree
2015-07-20 17:32:28 来源: 作者: 【 】 浏览:2
Tags: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 greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


    OJ's Binary Tree Serialization:

    The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

    Here's an example:

       1
      / \
     2   3
        /
       4
        \
         5
    
    The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".
    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    struct TreeNode
    {
    	int val;
    	TreeNode *left;
    	TreeNode *right;
    	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    #if 1 //第一种方法
    class Solution {
    public:
        bool isValidBST(TreeNode *root) {
    		return CheckBST(root,INT_MIN,INT_MAX);
        }
    private:
    	bool CheckBST(TreeNode *root,int min,int max)
    	{
    		if(root == NULL) return true;
    		return min < root->val && root->val < max && CheckBST(root->left,min,root->val) && CheckBST(root->right,root->val,max);
    	}
    };
    #endif // 1
    
    #if 0  //第二种方法
    class Solution {
    public:
        bool isValidBST(TreeNode *root) {
    		dfs(root);
    		for(int i = 1; i < result.size(); i++)
    		{
    			if(result[i-1] >= result[i]) return false;
    		}
    		return true;
        }
    private:
    	std::vector
        
          result;
    	void dfs(TreeNode *root)
    	{
    		if(root != NULL)
    		{
    			dfs(root->left);
    			result.push_back(root->val);
    			dfs(root->right);
    		}
    	}
    };
    #endif // 1
        


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 4786 Fibonacci Tree(生成树.. 下一篇HDU 1559 最大子矩阵 (DP)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)