LeetCode:验证二叉搜索树【98】
LeetCode:验证二叉搜索树【98】
题目描述
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:
2
/ \
1 3
输出: true
示例 2:
输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
题目分析
二叉搜索树的中序遍历结果递增。我们只需要写一个中序遍历然后看一下结果是否递增即可。
其实我们也不需要把中序遍历结果全部弄出来,我们可以在递归的过程中,实时地比较当前元素和前一个元素的大小值关系,如果出现小于等于,则不是搜索树。
我们来分析一下二叉树中序遍历的迭代算法:
class Solution {
public List<Integer> inorderTraversal(TreeNode node) {
List<Integer> ans = new ArrayList<>();
if(node==null)
return ans;
Stack<TreeNode> stack = new Stack<>();
while (node!=null||!stack.empty())
{
while (node!=null) { //while不成立时,到达最左下节点
stack.push(node);
node = node.left;
}
if (!stack.empty())
{
TreeNode tmp = stack.pop();
ans.add(tmp.val); //出栈并访问该节点
node = tmp.right;
}
}
return ans;
}
}
先一直沿着“左孩子方向”不断地走,当走到了最左下结点时(while不成立),准备出栈,访问该结点。当出栈访问完该结点之后,切换到该结点的右孩子的“子树”中,回到大循环,与前面一样,继续对该“子树”先沿着“左孩子方向”不断地走....
Java题解
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isValidBST(TreeNode root) {
List<Integer> list = new ArrayList<>();
inorder(root,list);
for(int i=0;i<list.size()-1;i++)
if(list.get(i)>=list.get(i+1))
return false;
return true;
} public void inorder(TreeNode node,List<Integer> list)
{
if(node==null)
return;
inorder(node.left,list);
list.add(node.val);
inorder(node.right,list);
}
}
LeetCode:验证二叉搜索树【98】的更多相关文章
- LeetCode - 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索树. ...
- [LeetCode] 98. Validate Binary Search Tree 验证二叉搜索树
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- LeetCode 98. 验证二叉搜索树 | Python
98. 验证二叉搜索树 题目来源:https://leetcode-cn.com/problems/validate-binary-search-tree 题目 给定一个二叉树,判断其是否是一个有效的 ...
- Java实现 LeetCode 98 验证二叉搜索树
98. 验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...
- 【LeetCode】98. 验证二叉搜索树
98. 验证二叉搜索树 知识点:二叉树:递归 题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大 ...
- LeetCode(98): 验证二叉搜索树
Medium! 题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...
- LeetCode第[98]题(Java):Validate Binary Search Tree(验证二叉搜索树)
题目:验证二叉搜索树 难度:Medium 题目内容: Given a binary tree, determine if it is a valid binary search tree (BST). ...
- 力扣Leetcode 98. 验证二叉搜索树
验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身 ...
- [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 ...
随机推荐
- storm 错误汇总
https://blog.csdn.net/xiaolang85/article/details/38492277
- 请说明meta标签的作用。
请说明meta标签的作用. 解答: meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多 ...
- Centos 下面安装 docker
试过了虚拟机VM ,今天尝试在虚拟机centos 中安装 docker ,入门是看的阮一峰的http://www.ruanyifeng.com/blog/2018/02/docker-tutorial ...
- Struts2漏洞
近日,Struts2曝出2个高危安全漏洞,一个是使用缩写的导航参数前缀时的远程代码执行漏洞,另一个是使用缩写的重定向参数前缀时的开放式重定向漏洞.这些漏洞可使黑客取得网站服务器的“最高权限”,从而使企 ...
- 微信公众号实现zaabix报警2017脚本(升级企业微信后)
#!/bin/bash CropID='xxxxxxxxxxxxxxxxx' Secret='xxxxxxxxxxxxxxxx' GURL="https://qyapi.weixin.qq. ...
- 细节取胜的javadoc
今个以为开发经验丰富的同事提出有个改动有问题,希望改一下.老前辈发话,心虚的紧,立即看了下,问题说是我的方法凝视中写了一个 ** doesn't ** 建议改为 does not 说这个生成javad ...
- 终于找到了最新的Chemdarw注册码
随着中国人对知识产权的保护意识提升,正版软件越来越流行,只有一小部分人还在寻找Chemdarw破解版.最新的ChemDraw 15正式版本已经强势来袭,在获取软件安装包之后需要有效的注册码才能激活软件 ...
- 【分享】Collecting all the cheat sheets
http://overapi.com/ 这个网站可以查询到所有与编程相关的各种技术,并给出详细的知识点(干货).
- poj 3422(最小费用最大流)
题目链接:http://poj.org/problem?id=3422 思路:求从起点到终点走k次获得的最大值,最小费用最大流的应用:将点权转化为边权,需要拆点,边容量为1,费用为该点的点权,表示该点 ...
- webpack中引入的path[require('path')]是node.js内置的package,用来处理路径的。
http://www.runoob.com/nodejs/nodejs-path-module.html