查看“验证二叉搜索树”的源代码
←
验证二叉搜索树
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
== 描述 == === leetcode === https://leetcode-cn.com/problems/validate-binary-search-tree/description/<br /> https://leetcode.com/problems/validate-binary-search-tree/description/ === 问题 === <pre> 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ 1 4 / \ 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。 </pre> == 递归 == <source lang="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) { return isValid(root, null, null); } private boolean isValid(TreeNode node, Integer min, Integer max) { if (node == null) { return true; } if (left != null && min >= node.val) { return false; } if (right != null && max <= node.val) { return false; } return isValid(node.left, min, node.val) && isValid(node.right, node.val, max); } } </source> == 迭代 == <source lang="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) { if (root == null) { return true; } Stack<TreeNode> stack = new Stack<>(); TreeNode pre = null; while (root != null || !stack.empty()) { while (root != null) { stack.push(root); root = root.left; } root = stack.pop(); if (pre != null && pre.val >= root.val) { return false; } pre = root; root = root.right; } return true; } } </source> [[category: 算法]] [[category: leetcode]] [[category: 树]]
返回至
验证二叉搜索树
。
导航菜单
个人工具
创建账户
登录
命名空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息