Leetcode98: Validate Binary Search Tree

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28350997/article/details/82501088

二叉查找树

二叉树层次遍历

树的中序遍历基础知识,一个栈,
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;
}

}

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

猜你喜欢

转载自blog.csdn.net/qq_28350997/article/details/82501088