Leetcode98: Validate Binary Search Tree

二叉查找树

二叉树层次遍历

树的中序遍历基础知识,一个栈,
while(没有走到最左边的节点 | | 栈不为空 )
       1.(还没有走到最左边的节点)最左边(该节点一定没有孩子节点了)不断入栈,直到把左边的元素全部压入栈
       2.(栈不为空)弹出后再处理访问该元素,再访问(有可能有,也有可能没有元素)其右节点(对其右孩子节点继续执行步骤1),
         弹出一个元素,处理这个元素,然后接着处理这个

演示图

二叉搜索树的判定

利用中序遍历非递归算法 对二叉树进行层次遍历得到的数组序列是逐步增大,(也就是前面的数据必然比后面的一个数据大)
层次遍历中前后处出栈的也就是数组中相邻的元素
逐步更新判断前后两个元素,如果有一次不符合情况,那么这就不符合二叉搜索树的定义情况
判断过程

root代表正在处理的元素,pre代表前面一个出栈的元素,最开始pre初始化为null, 然后就像访问链表元素一样逐步前后两个元素处理下


这里写代码片
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()){
         //这里判断root不为空
          while(root!=null)
          {
              stack.push(root);
              root = root.left;
          }
        if(!stack.empty())
        {
            root = stack.pop();
            //pre代表前面一个元素的情况,pre不能为空,第一次出栈不用判读
            if(pre!=null && root.val <= pre.val)
                return false;

            pre = root;
            //if(root.right!=null) 这里面不用再进行判断
            root = root.right;

        }
    }
    return true;
}

}

利用层次遍历解决的所有二叉查找树的问题
参考连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值