「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」。
二叉搜索树同样是我们在项目某些数据结构底层所依赖的一类数据,如何去验证一棵树是否是二叉搜索树呢?
题目描述
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
题目示例
题目解法
解法一:递归实现(推荐)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ /** * 递归调用实现 */class Solution { public boolean isValidBST(TreeNode root) { return isValidateBTee(root, Long.MIN_VALUE, Long.MAX_VALUE); } public boolean isValidateBTee(TreeNode node, long min, long max){ if(node == null){ return true; } int cur = node.val; if(cur <= min || cur >= max){ return false; } return isValidateBTee(node.left, min, cur) && isValidateBTee(node.right, cur, max); }}
复制代码
解法二:中序遍历
/** * 中序遍历 */class Solution { public boolean isValidBST(TreeNode root) { Deque<TreeNode> stack = new LinkedList<TreeNode>(); double preNodeVal = -Double.MAX_VALUE; while (!stack.isEmpty() || root != null) { while (root != null) { stack.push(root); root = root.left; } root = stack.pop(); // 中序遍历节点值小于等于前一个节点值false if (root.val <= preNodeVal) { return false; } preNodeVal = root.val; root = root.right; } return true; }}
LeetCode原题链接:leetcode-cn.com/problems/va…