首页 > 其他分享 >25_验证二叉搜索树

25_验证二叉搜索树

时间:2023-12-27 21:45:40浏览次数:28  
标签:25 TreeNode 验证 二叉 搜索 null root 节点

98.验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

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

示例 1:

img

输入:root = [2,1,3]
输出:true

示例 2:

img

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

思路

要知道要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。

有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。

递归法

class Solution {
	//递归
	TreeNode max;
	public boolean isValidBST(TreeNode root) {
		if (root == null) {
			return true;
		}
		// 左
		boolean left = isValidBST(root.left);
		if (!left) {
			return false;
		}
		// 中
		if (max != null && root.val <= max.val) {
			return false;
		}
		max = root;
		// 右
		boolean right = isValidBST(root.right);
		return right;
	}
}

迭代法

class Solution {
	//迭代
	public boolean isValidBST(TreeNode root) {
		if (root == null) {
			return true;
		}
		Stack<TreeNode> stack = new Stack<>();
		TreeNode pre = null;
		while (root != null || !stack.isEmpty()) {
			while (root != null) {
				stack.push(root);
				root = root.left;// 左
			}
			// 中,处理
			TreeNode pop = stack.pop();
			if (pre != null && pop.val <= pre.val) {
				return false;
			}
			pre = pop;
			root = pop.right;//右
		}
		return true;
	}
}

标签:25,TreeNode,验证,二叉,搜索,null,root,节点
From: https://www.cnblogs.com/codingbao/p/17931498.html

相关文章

  • 代码随想录算法训练营第十五天 | 层序遍历 ,226.翻转二叉树,101.对称二叉树
    一、二叉树层序遍历题目链接:LeetCode102.二叉树的层序遍历LeetCode107.二叉树的层序遍历IILeetCode199.二叉树的右视图LeetCode637.二叉树的层平均值LeetCode429.N叉树的层序遍历LeetCode515.在每个树行中找最大值LeetCode116.填充每个节点的下一个右侧节......
  • 学期(2023-2024-1) 学号(20232425)《网络空间安全导论》第5周学习总结
    学期(2023-2024-1)学号(20232425)《网络空间安全导论》第5周学习总结教材学习内容总结本周我学习了《网络空间安全导论》的第5章,其主要讲述了在学习过程中,我总结了如下要点,以思维导图的方式呈现:教材学习中的问题和解决过程问题1:监督学习在那种情况下更适用?问题1解决方案:通......
  • 学期(2023-2024-1) 学号(20232425)《网络空间安全导论》第6周学习总结
    学期(2023-2024-1)学号(20232425)《网络空间安全导论》第6周学习总结教材学习内容总结本周我学习了《网络空间安全导论》的第6章,其主要讲述了在学习过程中,我总结了如下要点,以思维导图的方式呈现:教材学习中的问题和解决过程问题1:区块链技术意义是什么?问题1解决方案:通过研读......
  • [LeetCode Hot 100] LeetCode102. 二叉树的层序遍历
    题目描述思路方法一:递归/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNodelef......
  • [LeetCode Hot 100] LeetCode543. 二叉树的直径
    题目描述思路所谓二叉树的直径,就是左右子树的最大深度之和。方法一:/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=va......
  • [LeetCode Hot 100] LeetCode104. 二叉树的最大深度
    题目描述思路熟练掌握二叉树的遍历算法方法一:层序遍历(迭代)+计数/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;......
  • [LeetCode Hot 100] LeetCode110. 平衡二叉树
    题目描述思路LeetCode104.二叉树的最大深度变种方法一:后序遍历(递归、dfs)/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.......
  • [LeetCode Hot 100] LeetCode111. 二叉树的最小深度
    题目描述思路二叉树的最小深度就是第一个叶子节点所在的层数方法一:前序遍历(递归、dfs)/***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intva......
  • [LeetCode Hot 100] LeetCode94. 二叉树的中序遍历
    题目描述思路熟练掌握迭代和递归的代码。递归:额外写一个函数voidinOrder(TreeNodenode,Listres)迭代:令cur=root,一直往左子树找,找到最后一个左子节点,当cur为空,就开始处理栈顶元素(将栈顶元素加入结果集),随后将cur设置为右子节点,继续执行以上操作。方法一:递归/***......
  • [LeetCode Hot 100] LeetCode144. 二叉树的前序遍历
    题目描述思路熟练掌握迭代和递归的代码。递归代码:额外写一个函数voidpreOrder(TreeNodenode,Listres)迭代代码:会用到数据结构——栈。先入栈当前节点的右子节点,再入栈左子节点。方法一:递归/***Definitionforabinarytreenode.*publicclassTreeNode{*......