首页 > 其他分享 >98. 验证二叉搜索树

98. 验证二叉搜索树

时间:2023-04-09 20:56:47浏览次数:40  
标签:return cur 验证 二叉 98 st NULL root

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

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

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

class Solution {
public:
    long long maxVal = LONG_MIN; // 因为后台测试数据中有int最小值
    bool isValidBST(TreeNode* root) {
        if (root == NULL) return true;

        bool left = isValidBST(root->left);
        // 中序遍历,验证遍历的元素是不是从小到大
        if (maxVal < root->val) maxVal = root->val;
        else return false;
        bool right = isValidBST(root->right);

        return left && right;
    }
    bool isValidBST(TreeNode* root) {
        stack<TreeNode*> st;
        TreeNode* cur = root;
        TreeNode* pre = NULL; // 记录前一个节点
        while (cur != NULL || !st.empty()) {
            if (cur != NULL) {
                st.push(cur);
                cur = cur->left;                // 左
            } else {
                cur = st.top();                 // 中
                st.pop();
                if (pre != NULL && cur->val <= pre->val)
                return false;
                pre = cur; //保存前一个访问的结点

                cur = cur->right;               // 右
            }
        }
        return true;
    }
};

标签:return,cur,验证,二叉,98,st,NULL,root
From: https://www.cnblogs.com/lihaoxiang/p/17301014.html

相关文章

  • 700. 二叉搜索树中的搜索
    给定二叉搜索树(BST)的根节点root和一个整数值val。你需要在BST中找到节点值等于val的节点。返回以该节点为根的子树。如果节点不存在,则返回null。classSolution{public:TreeNode*searchBST(TreeNode*root,intval){if(root==nullptr)returnnu......
  • 二叉树的最大深度,二叉树是否存在路径和为某值的路径
    递归的方法遍历二叉树最大深度:fun(root){if(root==null){ return0;}return(Max(fun(root.left),fun(root.right))+1);}和为某值fun(root,sum){if(root==null){returnfalse;}if(root.left==null&&root.right......
  • LeetCode 98.验证二叉搜索树
    1.题目:给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。有效二叉搜索树定义如下:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例1:输入:root=[2,1,3]输出:true来源:力扣(LeetCode......
  • 二叉树层序遍历和之字遍历
    1.用一个队列记录当前层的节点,然后一个个取出,取出的同时将取出节点的儿子节点加入到队列中。2.之字遍历则需要一个标志为将行进行翻转ArrayList<Integer>(ArrayList<Integer>())res;flag=true;//实现奇数行翻转,偶数行不翻转Queuetemp;temp.offer(head)while(temp!=nul......
  • 判断完全二叉树
    1.题目链接天梯赛真题--是否是完全二叉搜索树2.根据节点编号判断(better)借鉴自这里规定根节点的编号为\(1\),左孩子节点编号为\(left\),右孩子节点编号为\(right\),父节点的节点编号为\(fa\),则有:\(left=fa<<1\)\(right=fa<<1|1\)由于完全二叉树的节点编号......
  • (5)使用函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇和。输入两个正整数
    #include<stdio.h>#include<math.h>intprime(intm){  inti;  if(m<2)    return0;  for(i=2;i<=sqrt(m);i++){    if(!(m%i))      return0;  }  return1;}intmain(){  intm,n,flag;  printf("Enterm,......
  • 14.6二叉树的层序遍历实战
    function.h////Createdby93757on2023/3/21.//#ifndefINC_1_TREE_FUNCTION_H#defineINC_1_TREE_FUNCTION_H#include<stdio.h>#include<stdlib.h>typedefcharBiElemType;typedefstructBiTNode{BiElemTypec;//c就是书籍上的datastru......
  • 二叉树前序中序后序遍历实战
    function函数////Createdby93757on2023/3/21.//#ifndefINC_1_TREE_FUNCTION_H#defineINC_1_TREE_FUNCTION_H#include<stdio.h>#include<stdlib.h>typedefcharBiElemType;typedefstructBiTNode{BiElemTypec;//c就是书籍上的datastru......
  • 14.4二叉树层次建树
    创建function函数////Createdby93757on2023/3/21.//#ifndefINC_1_TREE_FUNCTION_H#defineINC_1_TREE_FUNCTION_H#include<stdio.h>#include<stdlib.h>typedefcharBiElemType;typedefstructBiTNode{BiElemTypec;//c就是书籍上的datast......
  • 剑指 Offer 36. 二叉搜索树与双向链表
    题目链接:剑指Offer36.二叉搜索树与双向链表方法一:回溯解题思路代码classSolution{private:intmx=INT_MIN,mi=INT_MAX;Node*start=NULL,*end=NULL;public:voidLrotate(Node*root,Node*last_root){//针对左子树,左旋if(!ro......