千家信息网

Validate Binary Search Tree的示例分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下Validate Binary Search Tree的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Given a binary tree, determ
千家信息网最后更新 2026年11月03日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 contains only nodes with keys greater than the node's key.

  • Both the left and right subtrees must also be binary search trees.

解法一:

递归思想,递归先序遍历,假定当前结点为root,其左子树右下角节点为pre,右子树左下角节点为next

情况一:root==NULL,return true

情况二:

root!=NULL,则判断,

a)如果有左孩子,则如果root->left->val>=root->val ,则返回false;

b)如果比左子树中右下角元素小,return false;

c)如果有右孩子,即如果root->right->val<=root->val,则返回false;

d)如果比右子树左下角大,即如果next->val<=root->val,return false;

如果a,b,c,d都不为真,则说明,当前节点值比左孩子大,且比其前序节点值大,比右孩子小,且比后续节点值小,这时返回左子树和右子树的结果。

即

最后return BST(root->left)&&BST(root->right)

TreeNode* findpre(TreeNode *root){        if(!root||!root->left)            return NULL;        TreeNode *p=root->left;        while(p->right){            p=p->right;        }        return p;    }    TreeNode* findnext(TreeNode *root){        if(!root||!root->right)            return NULL;        TreeNode *p=root->right;        while(p->left){            p=p->left;        }        return p;    }    bool isValidBST(TreeNode* root) {        if(!root)            return true;        if(root->left&&root->left->val>=root->val)            return false;        if(root->right&&root->right->val<=root->val)            return false;        TreeNode *pre=findpre(root),*next=findnext(root);        if(pre&&pre->val>=root->val||next&&next->val<=root->val)            return false;        return isValidBST(root->left)&&isValidBST(root->right);    }

解法二:

从解法一看出,其实只要保证,当前值比左子树pre节点大,且比右子树next节点值小即可,可以把a,b,这两种情况注释掉,但存在也是有一定用处的,可以首先判断左右孩子,如果左右孩子都不满足,则就不用找前序和后继了。

bool isValidBST(TreeNode* root) {        if(!root)            return true;        /*if(root->left&&root->left->val>=root->val)            return false;        if(root->right&&root->right->val<=root->val)            return false;*/        TreeNode *pre=findpre(root),*next=findnext(root);        if(pre&&pre->val>=root->val||next&&next->val<=root->val)            return false;        return isValidBST(root->left)&&isValidBST(root->right);    }

解法三:

其实,利用中序遍历可以得到有序序列,只要当前节点比前一个节点大,即是BST,

bool isValidBSTCore(TreeNode *root,TreeNode *&pre){        if(!root)            return true;        if(!isValidBSTCore(root->left,pre))//左子树            return false;        if(pre&&pre->val>=root->val)//当前结点与前节点比较            return false;        pre=root;//修改pre        return isValidBSTCore(root->right,pre);//右子树            }    bool isValidBST(TreeNode* root) {        if(!root)            return true;        TreeNode *pre=NULL;        return isValidBSTCore(root,pre);    }

看完了这篇文章,相信你对"Validate Binary Search Tree的示例分析"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

节点 子树 孩子 解法 情况 示例 分析 篇文章 结点 递归 有序 不用 元素 完了 序列 思想 更多 注释 用处 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技企业 保险科技 互联网保险 互联网 的科技创新 互联网科技美容 互联网科技宣传片 互联网科技公司名称 移动互联网科技股 重庆威客帮互联网科技 宁夏科技产业互联网案例 厦门比较好的科技互联网公司 佛山市拉法互联网科技有限公司 徐州市互联网科技有限公司 中科明德北京互联网科技 图游互联网科技 上海万顺科技互联网有限公司招聘 同城互联网络科技 河南商务圈互联网科技有限公司 互联网科技创新方面的资料 银川新华互联网科技学校招聘 高科技和互联网的现代国家 北京互联网科技有限公司 互联网的科技创新 济南和联互联网科技有限公司 剑昆互联网络科技有限公司临桂 互联网媒体平台算高科技产业 佛山市翊博互联网络科技有限公司 华中科技大学互联网的牛人 科技互联网海报 元气玛特互联网科技公司是外包吗 上海互联网科技园景观
0