递归实现:
public class Solution {
public bool IsValidBST(TreeNode root) {
return isValidBST(root, long.MinValue, long.MaxValue);
}
private bool isValidBST(TreeNode root, long minVal, long maxVal)
{
if(root == null)
{
return true;
}
if(root.val >= maxVal || root.val <= minVal)
{
return false;
}
return isValidBST(root.left, minVal, root.val) && isValidBST(root.right, root.val, maxVal);
}
}
非递归实现:
public class Solution {
public bool IsValidBST(TreeNode root) {
if(root == null)
{
return true;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode pre = null;
while(root != null || stack.Count != 0)
{
while(root != null)
{
stack.Push(root);
root = root.left;
}
root = stack.Pop();
if(pre != null && root.val <= pre.val)
{
return false;
}
pre = root;
root = root.right;
}
return true;
}
}
本文介绍了两种验证二叉搜索树是否有效的算法实现方法:递归和非递归。递归方法通过设定节点值的范围来判断,而非递归方法则采用中序遍历的方式检查节点值的顺序。

617

被折叠的 条评论
为什么被折叠?



