当前位置: 首页 > news >正文

「优选算法刷题」:计算布尔二叉树的值

一、题目

给你一棵 完整二叉树 的根,这棵树有以下特征:

  • 叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True 。
  • 非叶子节点 要么值为 2 要么值为 3 ,其中 2 表示逻辑或 OR ,3 表示逻辑与 AND 。

计算 一个节点的值方式如下:

  • 如果节点是个叶子节点,那么节点的  为它本身,即 True 或者 False 。
  • 否则,计算 两个孩子的节点值,然后将该节点的运算符对两个孩子值进行 运算 。

返回根节点 root 的布尔运算值。

完整二叉树 是每个节点有 0 个或者 2 个孩子的二叉树。

叶子节点 是没有孩子的节点。

示例 1:

输入:root = [2,1,3,null,null,0,1]
输出:true
解释:上图展示了计算过程。
AND 与运算节点的值为 False AND True = False 。
OR 运算节点的值为 True OR False = True 。
根节点的值为 True ,所以我们返回 true 。

示例 2:

输入:root = [0]
输出:false
解释:根节点是叶子节点,且值为 false,所以我们返回 false 。

提示:

  • 树中节点数目在 [1, 1000] 之间。
  • 0 <= Node.val <= 3
  • 每个节点的孩子数为 0 或 2 。
  • 叶子节点的值为 0 或 1 。
  • 非叶子节点的值为 2 或 3 

二、思路解析

二叉树,大部分都是用到递归来实现的,所以,这道题我们可以有意地往递归上靠。

而递归一大重点就是,我们要寻找 每次递归中的相同子问题

也就是计算所有子节点的值,而这则是通过子节点的值运算出的。

抽象一下递归函数流程就是:

1. 当前问题规模为 n=1 时,即叶子节点,直接返回当前节点值;
2. 递归求得左右子节点的值;
3. 通过判断当前节点的逻辑运算符,计算左右子节点值运算得出的结果;

具体运算结合题目的条件即可,下面是完整代码实现👇

三、完整代码

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean evaluateTree(TreeNode root) {if(root.left == null){return root.val == 0 ? false : true; }boolean left = evaluateTree(root.left);boolean right = evaluateTree(root.right);return root.val == 2 ? left | right : left & right;}
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

相关文章:

「优选算法刷题」:计算布尔二叉树的值

一、题目 给你一棵 完整二叉树 的根&#xff0c;这棵树有以下特征&#xff1a; 叶子节点 要么值为 0 要么值为 1 &#xff0c;其中 0 表示 False &#xff0c;1 表示 True 。非叶子节点 要么值为 2 要么值为 3 &#xff0c;其中 2 表示逻辑或 OR &#xff0c;3 表示逻辑与 AND…...

A系统数据表同步到B系统数据表

一、 事务操作 &#xff08;小量数据&#xff09; 事务操作通常用于确保数据的一致性和完整性。以下是一些常见的应用场景&#xff1a; 银行转账&#xff1a;当从一个账户向另一个账户转账时&#xff0c;需要确保两个操作&#xff08;从一个账户扣款和向另一个账户存款&#x…...

Qt实现类似ToDesk顶层窗口 不规则按钮

先看效果&#xff1a; 在进行多进程开发时&#xff0c;可能会遇到需要进行全局弹窗的需求。 因为平时会使用ToDesk进行远程桌面控制&#xff0c;在电脑被控时&#xff0c;ToDesk会在右下角进行一个顶层窗口的提示&#xff0c;效果如下&#xff1a; 其实要实现顶层窗口&#xf…...

发布4-运行JRT程序

到了本章节&#xff0c;你需要准备好JDK17的环境和idea环境。并且安装好选择的数据库软件。这章将正式开始JRT的程序开发。 首先获取程序&#xff0c;我会给下载地址 下载后解压会得到下图目录的文件结构&#xff0c;DBFile放IRIS和PG的数据库文件&#xff0c;JRTClient放打包…...

利用VPN设备漏洞入侵!新型勒索软件CACTUS攻击手法分析

近期&#xff0c;亚信安全应急响应中心截获了利用VPN设备已知漏洞传播的新型勒索软件CACTUS&#xff0c;该勒索于2023年3月首次被发现&#xff0c;一直保持着活跃状态。CACTUS勒索软件通过Fortinet VPN的已知漏洞进行入侵&#xff08;黑客首先获取到VPN账号&#xff0c;再通过V…...

第7章 SpringBoot安全管理

学习目标 了解SpringSecurity安全管理的功能 掌握SpringSecurity的安全配置 掌握SpringSecurity自定义用户认证的实现方法 掌握SpringSecurity自定义用户授权管理的实现方法 掌握如何使用SpringSecurity实现页面控制 实际开发中,一些应用通常要考虑到安全性问题。例如,对于一…...

【QT+QGIS跨平台编译】之二十二:【FontConfig+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、FontConfig介绍二、文件下载三、文件分析四、pro文件五、编译实践 一、FontConfig介绍 FontConfig 是一个用于配置和定制字体的库&#xff0c;广泛应用于基于X Window系统的操作系统中&#xff0c;尤其是在Linux和Unix-like系统中。它为应用程序提供了一种统一的…...

echarts中绘制3D三维地球

简介 echarts中的三维地球&#xff0c;需要用到世界地图json数据&#xff0c;我把json文件放到我的资源中&#xff0c;有需要的自行下载。 安装插件 // 安装echats npm install echarts --save npm install echarts-gl --save 项目中引用 1&#xff0c;引入安装的echarts…...

go grpc高级用法

文章目录 错误处理常规用法进阶用法原理 多路复用元数据负载均衡压缩数据 错误处理 gRPC 一般不在 message 中定义错误。毕竟每个 gRPC 服务本身就带一个 error 的返回值&#xff0c;这是用来传输错误的专用通道。gRPC 中所有的错误返回都应该是 nil 或者 由 status.Status 产…...

Redis实现登录的优化

目录 1 前言 2 实现步骤 2.1 软件环境准备 2.1.1 Redis的安装 2.1.2 在pom.xml中添加依赖 2.1.3 在application.yml中进行相关配置 2.2 StringRedisTemplate的常用方法 2.2.1 获取operations 2.2.2 主要方法 2.3 令牌主动失效机制 2.3.1 登录时将令牌存入Redis 2.…...

ROS方向第二次汇报(5)

文章目录 1.本方向内学习内容&#xff1a;1.1.自定义msg&#xff1a;1.1.1.定义msg文件&#xff1a;1.1.2.编辑配置文件&#xff1a; 1.2.自定义srv&#xff1a;1.2.1.定义srv文件&#xff1a;1.2.2.编辑配置文件&#xff1a; 1.3.服务通信案例实现&#xff1a;1.3.1.服务端实现…...

C# 浅克隆与深克隆

在C#中&#xff0c;浅克隆&#xff08;Shallow Clone&#xff09;和深克隆&#xff08;Deep Clone&#xff09;是两种常见的对象克隆技术&#xff0c;用于创建对象的新副本。 它们的主要区别在于复制对象的层次和属性的处理方式。 浅克隆&#xff08;Shallow Copy&#xff09;…...

Shell 正则表达式及综合案例及文本处理工具

目录 一、常规匹配 二、常用特殊字符 三、匹配手机号 四、案例之归档文件 五、案例之定时归档文件 六、Shell文本处理工具 1. cut工具 2. awk工具 一、常规匹配 一串不包含特殊字符的正则表达式匹配它自己 例子&#xff0c;比如说想要查看密码包含root字符串的&#x…...

React | Center 组件

在 Flutter 中有 Center 组件&#xff0c;效果就是让子组件整体居中&#xff0c;挺好用。 React 中虽然没有对应的组件&#xff0c;但是可以简单封装一个&#xff1a; index.less .container {display: flex;justify-content: center;align-items: center;align-content: ce…...

头歌C++之函数强化练习题

目录 第1关:结构实现复数运算 任务描述 编程要求 第2关:求亲密对数 任务描述 编程要求 第3关:计算一年的第几天 任务描述 编程要求 第4关:正整数求和 任务描述 编程要求 第5关:Pig Latin 任务描述 编程要求 第6关:打印日历 任务描述 编程要求 第1关:结…...

淘宝扭蛋机小程序:开启你的惊喜之旅

随着移动互联网的飞速发展&#xff0c;各种小程序层出不穷&#xff0c;其中&#xff0c;淘宝扭蛋机小程序以其独特的互动性和趣味性&#xff0c;吸引了大量用户。本文将为你详细介绍这款小程序的特色功能、用户体验以及如何使用&#xff0c;助你开启一段惊喜之旅。 一、特色功…...

Jmeter 基于Docker 实现分布式测试

基于Docker 实现分布式测试 制作Jmeter基础镜像制作工作节点镜像启动工作节点启动控制节点遇到的问题 使用Docker 部署Jmeter非常方便&#xff0c;可以省略软件的安装以及配置&#xff0c;比如jdk、jmeter。需要部署多个工作节点可以节省时间。 制作Jmeter基础镜像 下载jmeter…...

Vite与Webpack打包内存溢出问题优雅处理方式

Vite与Webpack打包内存溢出问题处理 文章目录 Vite与Webpack打包内存溢出问题处理1. Vite1. 打包错误提示2. 命令行方式解决3. 配置环境变量方式解决1. 设置变量2. 配置系统的环境变量 2. Webpack1. 打包错误提示2. 命令行方式解决3. 配置环境变量方式解决1. 设置变量2. 配置系…...

sqlalchemy——@listens_for

问&#xff1a;sqlalchemy如何实现&#xff1a;表中指定数据更新时&#xff0c;其time字段自动更新&#xff1f;答&#xff1a;使用listens_for 装饰器来注册事件监听器&#xff0c;确保在项目数据更新时触发相应的处理逻辑。 示例代码如下&#xff1a; # coding: utf-8 impo…...

MySQL进阶之锁(全局锁以及备份报错解决)

锁 全局锁 全局锁就是对整个数据库实例加锁&#xff0c;加锁后整个实例就处于只读状态&#xff0c;后续的DML的写语句&#xff0c;DDL语 句&#xff0c;已经更新操作的事务提交语句都将被阻塞。 其典型的使用场景是做全库的逻辑备份&#xff0c;对所有的表进行锁定&#xff…...

深度学习习题3

1.训练神经网络过程中&#xff0c;损失函数在一些时期&#xff08;Epoch&#xff09;不再减小, 原因可能是&#xff1a; 1.学习率太低 2.正则参数太大 3.卡在了局部最小值 A1 and 2 B. 2 and 3 C. 1 and 3 D. 都是 2.对于分类任务&#xff0c;我们不是将神经网络中的随机权重…...

SQLMesh实战:用虚拟数据环境和自动化测试重新定义数据工程

在数据工程领域&#xff0c;软件工程实践&#xff08;如版本控制、测试、CI/CD&#xff09;的引入已成为趋势。尽管像 dbt 这样的工具已经推动了数据建模的标准化&#xff0c;但在测试自动化、工作流管理等方面仍存在不足。 SQLMesh 应运而生&#xff0c;旨在填补这些空白&…...

QUIC——UDP实现可靠性传输

首先我们要知道TCP存在什么样的痛点问题 TCP的升级很困难TCP建立连接的延迟网络迁移需要重新建立连接TCP存在队头阻塞问题 QUIC就是为了解决以上的问题而诞生了, 下面我会介绍QUIC的一些特性和原理 QUIC对比TCP优势: 握手建连更快 QUIC内部包含了TLS, 它在自己的帧会携带TL…...

Django核心知识点全景解析

引言 本文深入剖析Django核心组件&#xff0c;涵盖数据交换、异步交互、状态管理及安全认证&#xff0c;附完整代码示例和避坑指南&#xff01; 目录 引言 一、JSON&#xff1a;轻量级数据交换标准 1. 核心特性 2. 标准格式 3. 各语言处理方法 4. 常见错误示例 二、AJA…...

day46 python预训练模型补充

目录 一、预训练模型的背景知识 二、实验过程 &#xff08;一&#xff09;实验环境与数据准备 &#xff08;二&#xff09;预训练模型的选择与适配 &#xff08;三&#xff09;训练策略 三、实验结果与分析 四、学习总结与展望 一、预训练模型的背景知识 在传统的神经网…...

MySQL复杂SQL(多表联查/子查询)详细讲解

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 MySQL复杂SQL&#xff08;多表联查/子查询&a…...

JVM 垃圾回收器 详解

垃圾收集器 SerialSerial Old&#xff1a;单线程回收&#xff0c;适用于单核CPU场景ParNewCMS&#xff1a;暂停时间较短&#xff0c;适用于大型互联网应用中与用户交互的部分Paraller ScavengeParallel Old&#xff1a;吞吐量高&#xff0c;适用于后台进行大量数据操作G1&#…...

C++2025.6.7 C++五级考题

城市商业街主干道是一条笔直的道路&#xff0c;商业街里有 n 家店铺&#xff0c;现给定 n 个店铺的位置&#xff0c;请在这条道路上找到一个中心点&#xff0c;使得所有店铺到这个中心点的距离之和最小&#xff0c;并输出这个最小值。 #include <bits/stdc.h> using nam…...

RT-Thread内核组成——内核移植

内核移植就是指将 RT-Thread 内核在不同的芯片架构、不同的板卡上运行起来&#xff0c;能够具备线程管理和调度&#xff0c;内存管理&#xff0c;线程间同步和通信、定时器管理等功能。移植可分为 CPU 架构移植和 BSP&#xff08;Board support package&#xff0c;板级支持包&…...

python学习打卡day47

DAY 47 注意力热图可视化 昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 # 可视化空间注意力热力图&#xff08;显示模型关注的图像区域&#xff09; def visualize_attention_map(model, test_loader,…...