LeetCode 98 验证二叉搜索树
题目:
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:
2
/ \
1 3
输出: true
示例 2:
输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
解题思路:
根据二叉搜索树的定义,我们发现一条规律,如果对该二叉树进行中序遍历,那么得到的是一个递增的序列。那这样的话,是不是需要一个数组来保存这个中序遍历得到的序列? 不用,我们可以设置两个变量 last 和 now,last为当前节点的中序遍历上一个节点的值,now为当前节点的值,这样若存在 now <= last 就不是二叉搜索树。
还有一点需要注意,last的初始值为多少比较好? 一开始我的想法是让last等于INT_MIN,但这样的话,若是中序遍历的第一个节点的值恰好为INT_MIN呢?这样不就满足了 now <= last 判错了吗?所以这里的last的首值必须为第一个节点的值,为保证这一点,应该还要设置一个cnt,用来记录是否是第一个节点,是第一个节点则让last等于它的值。
代码:
/**
* 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:
int last,now,cnt;
void inOrder(TreeNode* root, int &flag)
{
if(!root || flag)
{
return ;
}
inOrder(root->left, flag);
if(cnt == ) {
last = root->val;
}
else {
now = root->val;
if(now <= last) {
flag = ;
return ;
}
else
{
last = now;
}
}
cnt++;
inOrder(root->right, flag);
}
bool isValidBST(TreeNode* root) {
if(root == NULL || (root && root->left == NULL && root->right == NULL))
return true;
TreeNode* p = root;
int flag = ;
cnt = ;
inOrder(root, flag);
if(flag == )
return true;
else
return false;
}
};
LeetCode 98 验证二叉搜索树的更多相关文章
- LeetCode 98. 验证二叉搜索树 | Python
98. 验证二叉搜索树 题目来源:https://leetcode-cn.com/problems/validate-binary-search-tree 题目 给定一个二叉树,判断其是否是一个有效的 ...
- Java实现 LeetCode 98 验证二叉搜索树
98. 验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...
- 力扣Leetcode 98. 验证二叉搜索树
验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身 ...
- Leetcode 98 验证二叉搜索树 Python实现
给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索 ...
- LeetCode 98——验证二叉搜索树
1. 题目 2. 解答 2.1. 方法一 我们初始化根节点的范围为长整形数据的最小最大值 \([LONG\_MIN,LONG\_MAX]\),则其左子节点的取值范围为 \([LONG\_MIN,根节点 ...
- LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也 ...
- LeetCode:验证二叉搜索树【98】
LeetCode:验证二叉搜索树[98] 题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当 ...
- 【LeetCode】98. 验证二叉搜索树
98. 验证二叉搜索树 知识点:二叉树:递归 题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大 ...
- 98. 验证二叉搜索树 前序遍历解法以及后续遍历解法(go语言)
leetcode题目 98. 验证二叉搜索树 前序遍历 最简洁的答案版本,由于先判断的是根节点,所以直接判断当前root的值v,是否满足大于左子树最大,小于右子树最小,然后再遍历左子树,右子树是否是这 ...
随机推荐
- docker更改默认仓库地址
zq@ubuntu:~$ docker pull -h Flag shorthand -h has been deprecated, please use --help Usage: docker p ...
- JXOJ(基于UOJ)部署日志
JXOJ部署日志 前些日子协助cyc.llf两位奆老部署了JXOJ,为方便日后维护我校OJ的同学,写篇日志做记录以日后查看. 一.准备: 在尝试了多个不同OJ之后,我们最终选择了Universal ...
- 肿瘤数据库除了TCGA,还有TCIA--转载
TCIA就是基于TCGA数据开发的,不同的是TCIA只提供了20个癌种的免疫数据分析. 看网站首页的介绍就知道,这个数据库主要是根据TCGA的二代测序数据开发出来的.这里的20个癌种,点击每个柱子进去 ...
- git删除远程分支,删除本地分支
远程 # git push origin --delete duck - [deleted] duck 本地 # git branch -d duck 已删除分支 duck(曾为 dda11b8). ...
- Linux基础命令ls
目录处理命令:ls -a 显示所有文件,包括隐藏文件 --all -l h 详细信息显示 --long --human -d 查看目录属性 - -i 查看文件唯一编号 -表示文件 d表示目录 l ...
- springboot 使用Filter
1. 创建 Filter 类,实现 Filter 接口 import javax.servlet.*; import javax.servlet.annotation.WebFilter; impor ...
- linux top指令信息表示
top指令: PID ==== 进程号 USER ==== 进程所有者 PR ==== 进程优先级 NI ==== 进程优先级别数值 VIRT ==== 进程占用的虚拟内存 RES ==== ...
- 本地计算机上的 postgresql 服务启动后停止解决方法
在启动 postgresql 服务是遇到这种情况: 解决方法: 打开计算机管理====>查看应用程序日志信息,可以看出,由于日志配置错误的问题. 找到 postgresql.conf 文件,做如 ...
- 关于ckeditor5设置高度
在管理端模板AdminBSBMaterialDesign-master里发现一个比百度编辑器看起来更高大上的编辑器:ckeditor.模板中使用的是版本4,自己在官网上下载了最新版本.在之前的版本,使 ...
- 分析Linux内核5.0系统调用处理过程
学号: 363 本实验来源 https://github.com/mengning/linuxkernel/ 一.实验要求 1.编译内核5.02.qemu -kernel linux-5.0.1/ar ...