二叉树刷题

2023-11-09

在这里插入图片描述

二叉树

题目1:94 · 二叉树中的最大路径和 - LintCode
class Solution {
public:
	//求出从根到任意位置的最大长度
    int dfs(TreeNode* root,int& maxsum)
    {
	    if(root==NULL)	return 0;
	    int left=0,right=0,tmp=root->val;
	    //如果左子树存在,求出目前结点的左子树的最大长度
	    if(root->left)	left=dfs(root->left,maxsum);
	    //如果右子树存在,求出目前结点的右子树的最大长度
	    if(root->right) right=dfs(root->right,maxsum);
	    //如果左子树的最大长度是大于0的,目前结点的大小加上左子树最大长度
	    if(left>0)	tmp+=left;
	    //如果右子树的最大长度是大于0的,目前结点大小加上右子树最大长度
	    if(right>0) tmp+=right;
	    //比较目前结点的子树的最大长度
	    maxsum=max(maxsum,tmp);
	    //返回从目前根开始的最大长度
	    return max(0,max(left,right)+root->val);
    }
    int maxPathSum(TreeNode *root) {
	    if(root==NULL)	return 0;
	    int maxsum=INT_MIN;
	    dfs(root,maxsum);
	    return maxsum;
    }
};
题目2:475 · 二叉树的最大路径和 II - LintCode
class Solution {
public :
	int maxPathSum2(TreeNode * root) {
        if (root == NULL)
            return INT_MIN;
        return max(0, max(maxPathSum2(root->left), maxPathSum2(root->right))) + root->val;
    }
};

二叉搜索树

定义:

  • 左子树都比根节点小
  • 右子树都不小于根节点
    从效果出发:
  • 中序遍历是不下降序列
    性质:
  • 如果一棵二叉树的中序遍历是不下降序列,则一定不是搜索二叉树
  • 如果一棵二叉树的中序遍历是不下降的,不一定是搜索二叉树
题目一:95 · 验证二叉查找树 - LintCode

root 节点,无左右子树的情况下,可以把它的左边下限想象成负无穷,右边上限想象成正无穷。因为root结点要大于left,小于right;

对于左子树的情况就会发现,左节点的下限还是负无穷,而上限已经变成了root 右边也是一样,上限还是正无穷而下限成了root

这里用nullptr 代替了 负无穷和正无穷,比较的时候直接跳过这种情况了,就不用进行比较。

这里采用的思想是从上向下的思考方式。

class Solution {
public:
    bool isValidBST(TreeNode* root) {
        if(root==NULL) return true;
        return dfs(root,nullptr,nullptr);
    }
    bool dfs(TreeNode* root, TreeNode* low, TreeNode* high) {
        if (root == NULL) return true;
        if ((low && root->val <= low->val) || (high && root->val >= high->val)) return false;
        return dfs(root->left,low, root) && dfs(root->right, root, high);
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树刷题 的相关文章

  • Docker镜像相关操作有哪些?

    什么是Docker Docker是一个开源的应用容器引擎 它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 然后发布到安装了任何 Linux 发行版本的机器上 Docker基于LXC来实现类似VM的功能 可以在更有限的硬件资源上提
  • 2020年第十一届蓝桥杯省赛javab组寻找2020

    简单的模拟 向右 向下 向右下 package 算法 import java util Scanner public class 寻找20 static int N 100000 4 5 static int M 1000 5 static

随机推荐

  • python实现车牌识别系统

    车牌识别系统 算法参考 http www zengqiang club blog 34 GUI参考 https blog csdn net wzh191920 article details 79589506 基于opencv的模板识别来实
  • 设计模式的应用场景(9)--装饰模式

    装饰模式 定义 装饰模式以对客户端透明的方式扩展对象的功能 是继承方案的一个替代方案 提供比继承更多的灵活性 优点 能够提供比使用继承关系更加灵活的拓展对象的功能 它可以动态增加对象的功能并且可以随意组合这些功能 缺点 使用装饰模式进行设计
  • Hadoop学习之Hadoop完全分布式集群安装

    注 本文的主要目的是为了记录自己的学习过程 也方便与大家做交流 转载请注明来自 http blog csdn net ab198604 article details 8250461 要想深入的学习hadoop数据分析技术 首要的任务是必须
  • 在 Python 中生成随机字符串

    介绍生成随机字符串的几种方法 1 使用random choice 实现 import string import random number of strings 5 length of string 8 for x in range nu
  • Latex的使用

    1 语法规则 是TeX中做为命令的标志 格式 命令名 可选参数 不可省略参数 2 常用的宏包 amsmath 数学符号与公式宏包 amsfonts 数学符号与字体宏包 Ctex 支持中文的排版 gaphicx 插图处理 Xcolor 颜色处
  • Vmwarexiade镜像下载地址

    https msdn itellyou cn 复制链接在迅雷上下载
  • Reactive判断的API,toRef & toRefs,ref其他的API,customRef

    Reactive判断的API isProxy 检查对象是否是由 reactive 或 readonly创建的 proxy isReactive 检查对象是否是由 reactive创建的响应式代理 如果该代理是 readonly 建的 但包裹
  • 基于Arduino Uno的智能小车(可遥控,避障,调速)模块:L298N HC-05 HC-SR04及sg90(180度)舵机

    文章目录 一 先让小车动起来 二 加入对应模块实现对应功能 1 HC SR04及SG90舵机 2 完整程序编写 总结 一 先让小车动起来 1 用到的函数 定义引脚的输入 输出函数 pinMode pin OUT INPUT 通过使用pinM
  • jupyter 设置主题Error:Could not find a version that satisfies the requirement jupyterthemes from version

    1 jupyter设置主题的步骤 命令窗口输入 pip install jupyterthemes 具体主题讲解可参考 https www cnblogs com shanger p 12006161 html 2 遇到的问题 Could
  • QT的Tree View Model示例

    一 介绍 使用MVC架构 Tree View与Tree Widget 相比而言 需要为tree view 设置一个model 使Tree View 能有效降低内存的使用率 下面参考Qt官方提供的demo Simple Tree Model
  • SSM框架controller类正常部分页面跳转404

    一 问题 在做项目的时候 将写好的页面整合到SSM框架过程中 写好controller类 将相关页面调整过后 启动Tomcat 进入系统进行测试页面跳转问题 发现一部分页面跳转成功 一部分页面跳转失败 且跳转失败的页面是同一个目录下的 二
  • blender怎么移动骨骼_Blender

    1 打开blender可以通过 shift a 调出创建菜单 2 通过 rgs 这三个按键 可以分别对模型进行旋转移动缩放 3 shift d 可以实现复制功能 4 使用 z 键可以切换到线框模式 再按一次切换回来 5 tab 按键可以切换
  • 完全小白的pycharm深度学习调试+for循环断点条件设置

    完全小白的pycharm深度学习调试 for循环断点条件设置 写在最前面 基础方法 pycharm断点调试 控制台输入 代码中循环的debug方法 pycharm中图标的介绍 常见的Bug Debug经验 1 检查激活函数的输入值 2 检查
  • Hive往表写入数据的八种方法

    1 使用insert select 语法 insert overwrite table dest table partition dt xxxxxx selectc1 c2from src tablewhere 复制代码 select中的字
  • EC11编码器和单片机通信

    EC11编码器 EC11编码器通常又被称作为旋转编码器 一般主要是用于亮度 温度 频率 音量调节等参数控制 三只脚中的C脚接地 AB脚接上拉电阻后 当左转或右转时 AB脚就有脉冲信号输出 S1和S2脚为按压开关 按下时导通 旋转编码器的引脚
  • ARM汇编学习三

    有时 一次性加载 或存储 多个值更有效率 因此 我们需要使用LDM 载入多个值 和STM 存储多个值 这些指令基于起始地址的不同 有不同的形式 下面是我们将在本节中将会使用的代码 我们将一步一步地完成每一个指令 代码在test5 s中 da
  • [HNCTF 2022 WEEK2]ez_ssrf

    HNCTF 2022 WEEK2 ez ssrf
  • Windows下使用Linux命令 - GNUWin32 安装

    https sourceforge net projects getgnuwin32 source typ redirect 下载 GetGnuWin32 0 6 3 exe https sourceforge net projects g
  • BFD协议简介

    1 背景 双向转发检测BFD Bidirectional Forwarding Detection 是一种全网统一的检测机制 用于快速检测 监控网络中链路或者IP路由的转发连通状况 为了保护关键应用 网络中会设计有一定的冗余备份链路 网络发
  • 二叉树刷题

    二叉树 题目1 94 二叉树中的最大路径和 LintCode class Solution public 求出从根到任意位置的最大长度 int dfs TreeNode root int maxsum if root NULL return