二叉树abcdefghij先序遍历_二叉树后序遍历的非递归算法

二叉树abcdefghij先序遍历_二叉树后序遍历的非递归算法给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。题解深搜/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() :

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

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

在这里插入图片描述
题解
深搜

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class Solution { 
   
public:
    const int INF = 0x3f3f3f3f;
    const int OINF = -0x3f3f3f3f;
    bool dfs(TreeNode * t,int &Min,int &Max){ 
   
        if(t->left == NULL && t->right == NULL){ 
   
            Min = t->val,Max = t->val;
            return true;
        }
        int tlMax = t->val,tlMin = t->val,trMax = t->val,trMin = t->val;
        Min = Max = t->val;
        if(t->left){ 
   
            if(!dfs(t->left,tlMin,tlMax))return false;
            else{ 
   
                if(tlMax >= t->val || tlMin >= t->val)return false;
                Min = min(tlMin,Min);
                Max = max(tlMax,Max);
            }
        }
        if(t->right){ 
   
            if(!dfs(t->right,trMin,trMax))return false;
            else{ 
   
                if(trMax <= t->val || trMin <= t->val)return false;
                Min = min(trMin,Min);
                Max = max(trMax,Max);
            }
        }
        return true;
    }
    bool isValidBST(TreeNode* root) { 
   
        int a = 0,b = 0;
        return dfs(root,a,b);
    }
};
  1. 仍然为深搜
    dfs(root,lower,upper):代表以root为根节点的树是否在lower和upper范围内
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class Solution { 
   
public:
    const long long INF = 0x3f3f3f3f3f3f3f3f;
    bool dfs(TreeNode *root,long long lower,long long upper){ 
   
        if(root->left == NULL && root->right == NULL){ 
   
            if(root->val > lower && root->val < upper)return true;
            else return false;
        }
        if(root->val <= lower || root->val >= upper)return false;
        if(root->left && !dfs(root->left,lower,root->val))return false;
        if(root->right && !dfs(root->right,root->val,upper))return false;

        return true;
    }
    bool isValidBST(TreeNode* root) { 
   
        cout<<INF<<endl;
        return dfs(root,-INF,INF);
    }
};
  1. 中序遍历
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class Solution { 
   
public:
    vector<int>res;
    bool dfs(TreeNode *root){ 
   
        if(root == NULL)return true;
        if(!dfs(root->left))return false;
        res.push_back(root->val);
        if(res.size() >= 2 && res[res.size() - 1] <= res[res.size() - 2])return false;
        if(!dfs(root->right))return false;

        return true;
    }
    bool isValidBST(TreeNode* root) { 
   
        return dfs(root);
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168871.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用e.target.dataset出现的问题

    使用e.target.dataset出现的问题

    2021年3月12日
  • 踩坑(node配置淘宝镜像)

    作为一名菜鸟级别的选手,搭建vue.js时,淘宝镜像安装一直报错,我真的感觉头皮发麻,要裂开了的感觉。遇到的第(1)个问题是:提示未安装python,安装python3又提示找不到python2,然后又安装了python2;//////////////////////////所以,这里一定要安装python2////////////////////////////下载地址<页面加载比较慢,请耐心等待>:https://www.python….

    2022年4月17日
  • mysql navicat 15 激活码生成_通用破解码

    mysql navicat 15 激活码生成_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
  • 初中python培训机构

    初中python培训机构都知道现在Python这门编程语言很火,那它究竟火到什么程度?可能互联网上铺天盖地的Python学习贴不够直观,求职平台上Python相关工资水涨船高,也离我们普通人太远,但——Python被纳入基础教育体系呢?浙江省八年级将新增Python编程课程风变编程得到最新消息,在2020年9月开始的新学期中,浙江省三年级到九年级信息技术课将同步替换新教材,而其中最大的变化是,八年级将新增Python课程内容。同时,新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材规划

    2022年5月16日
  • ue4动态加载模型_U3D动态页面

    ue4动态加载模型_U3D动态页面本帖纯属个人原创,如有转载请注明出处需要注意的几点:1.调试环境下进行的资源加载方式到打包出来后不一定能够使用。2.假如遇到调试模式下程序运行正常,但是打包出来后程序crash,可以查看log:Saved/Logs/filename/log3.资源路径的代码书写格式map:”Game/Maps/Main.map”蓝图类:”Game/Blueprint/Skil

    2022年10月5日
  • printf的题目

    以前学习于渊老师的《自己动手写操作系统》一书的时候,也自己实现过printf,不过那是比较简单的版本。最近看《程序员面试宝典》,做到这么一道题目:#include<stdio.h>int

    2021年12月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号