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.

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.

 判断是否是二叉搜索树有陷阱:http://blog.csdn.net/sgbfblog/article/details/7771096

C++实现代码如下,使用的是中序遍历是否为递增的序列来判断:

#include<iostream>
#include<new>
#include<vector>
#include<climits>
using namespace std;

//Definition for binary tree
struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution
{
public:
    bool isValidBST(TreeNode *root)
    {
        if(root==NULL)
            return true;
        vector<int> rvec;
        preorder(root,rvec);
        size_t i;
        int max;
        if(rvec.size())
            max=rvec[0];
        for(i=1;i<rvec.size();i++)
        {
            if(rvec[i]>max)
            {
                max=rvec[i];
            }
            else
                return false;
        }
        return true;
    }
    void preorder(TreeNode *root,vector<int> &rvec)
    {
        if(root)
        {
            preorder(root->left,rvec);
            rvec.push_back(root->val);
            preorder(root->right,rvec);
        }
    }
    void createTree(TreeNode *&root)
    {
        int i;
        cin>>i;
        if(i!=0)
        {
            root=new TreeNode(i);
            if(root==NULL)
                return;
            createTree(root->left);
            createTree(root->right);
        }
    }
};

int main()
{
    Solution s;
    TreeNode *root;
    s.createTree(root);
    cout<<s.isValidBST(root)<<endl;
}

错误的方法:

#include<iostream>
#include<new>
#include<vector>
using namespace std;

//Definition for binary tree
struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution
{
public:
    bool isValidBST(TreeNode *root)
    {
        if(root==NULL)
            return true;
        if(root->left&&root->right)
            return (root->left->val<root->val)&&(root->val<root->right->val)&&isValidBST(root->left)&&isValidBST(root->right);
        else if(root->left)
            return (root->left->val<root->val)&&isValidBST(root->left);
        else if(root->right)
            return (root->val<root->right->val)&&isValidBST(root->right);
    }
    void createTree(TreeNode *&root)
    {
        int i;
        cin>>i;
        if(i!=0)
        {
            root=new TreeNode(i);
            if(root==NULL)
                return;
            createTree(root->left);
            createTree(root->right);
        }
    }
};

int main()
{
    Solution s;
    TreeNode *root;
    s.createTree(root);
    cout<<s.isValidBST(root)<<endl;
}

 

相关文章
|
机器学习/深度学习 监控 自动驾驶
视觉智能详解
视觉智能详解
873 1
|
11月前
|
机器学习/深度学习 人工智能 弹性计算
阿里云AI服务器价格表_GPU服务器租赁费用_AI人工智能高性能计算推理
阿里云AI服务器提供多种配置,包括CPU+GPU、CPU+FPGA等组合,支持高性能计算需求。本文整理了阿里云GPU服务器的价格信息,涵盖NVIDIA A10、V100、T4、P4、P100等型号,适合人工智能、机器学习和深度学习等计算密集型任务。具体价格和适用场景详见表格。
531 10
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习在自然语言处理中的突破与未来趋势####
本文深入探讨了深度学习技术在自然语言处理(NLP)领域的最新进展,重点介绍了其在语言理解、生成及翻译等方面的革新应用。通过对比传统方法的局限性,展示了深度学习如何以其强大的特征提取和学习能力重塑NLP领域。文章还分析了当前面临的挑战,如模型泛化能力、解释性问题及资源消耗等,并展望了未来发展趋势,包括多模态学习、持续学习机制以及更加公平和可解释的AI模型设计。本文旨在为读者提供一个全面而深入的视角,理解深度学习在推动NLP发展的核心作用及其未来的无限可能。 ####
|
12月前
|
运维 监控 数据中心
100Base-FX以太网媒体标准详解
【10月更文挑战第16天】
871 1
|
人工智能 安全 数据处理
21.5万张X光,78万个问题!德州大学NIH等联合发布医学视觉问答数据集Medical-CXR-VQA
【9月更文挑战第2天】近年来,人工智能在医学领域的应用取得显著进展,特别是医学视觉问答(VQA)技术。德州大学与美国国立卫生研究院(NIH)联合发布的Medical-CXR-VQA数据集包含21.5万张X光图像和78万个问题,是当前最大的医学VQA数据集之一。其多样化的问题类型和高质量的标注,为研究者提供了丰富资源,推动医学视觉问答技术的发展。该数据集的开放共享促进了领域内的合作与交流,并有望提升临床诊断和病情评估的效率与质量,成为医学人工智能领域的重要里程碑。然而,数据隐私、标注一致性和模型可解释性等问题仍需进一步解决。
274 13
|
存储 传感器 Linux
STM32微控制器为何不适合运行Linux系统的分析
总的来说,虽然技术上可能存在某些特殊情况下将Linux移植到高端STM32微控制器上的可能性,但从资源、性能、成本和应用场景等多个方面考虑,STM32微控制器不适合运行Linux系统。对于需要运行Linux的应用,更适合选择ARM Cortex-A系列处理器的开发平台。
567 0
|
缓存 JavaScript 前端开发
深入剖析NPM: Node包管理器的介绍和使用指南
深入剖析NPM: Node包管理器的介绍和使用指南
231 0
|
数据采集 运维 监控
数据能力体系NO2:数据验证
数据能力体系NO2:数据验证
数据能力体系NO2:数据验证
|
机器学习/深度学习 传感器 监控
交通信号控制优化
交通信号控制优化
333 2
|
传感器 监控 数据可视化
万界星空MES安灯管理:优化生产监控的重要工具
MES安灯管理是一种基于物理安灯和数字化管理的生产异常管理工具。它通过物理安灯和数字化系统的结合,实现对生产异常的实时监控和及时反馈,从而帮助企业快速响应和解决生产异常,提高生产效率和产品质量。
343 0
万界星空MES安灯管理:优化生产监控的重要工具