LeetCode - 98. 验证二叉搜索树(迭代、递归)2
发布日期:2021-05-07 21:18:06 浏览次数:10 分类:技术文章

本文共 1488 字,大约阅读时间需要 4 分钟。

题目:

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。

节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

输入:

2	   / \	  1   3

输出: true

示例 2:

输入:

5   / \  1   4  	 / \    3   6

输出: false

解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。

在这里插入图片描述

在这里插入图片描述
方法一: 递归

public boolean isValidBST(TreeNode root){           return recurse(root,null,null);    }    public boolean recurse(TreeNode node,Integer lower,Integer upper){           //空节点是合理的二叉搜索树        if (node == null){               return true;        }        //节点不为空,判断节点上的值是否在上下界内        int val = node.val;        if (lower != null && val <= lower)return false;        if (upper != null && val >= upper)return false;        //将当前节点的值替换为下届,继续检查右边的子节点        if (!recurse(node.right,val,upper))return false;        //将当前节点的值替换为上界,继续检查左边的子节点        if (!recurse(node.left,lower,val))return false;        return true;    }

方法二: 迭代 (**)

class Solution {       public boolean isValidBST(TreeNode root) {           Deque
stack = new LinkedList
(); double inorder = -Double.MAX_VALUE; while (!stack.isEmpty() || root != null) { while (root != null) { stack.push(root); root = root.left; } root = stack.pop(); // 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树 if (root.val <= inorder) { return false; } inorder = root.val; root = root.right; } return true; }}
上一篇:LeetCode - 104.二叉树的最大深度(递归)1
下一篇:LeetCode - 226.翻转二叉树(迭代、递归)2

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月13日 15时53分22秒