LeetCode刷题--- 计算布尔二叉树的值

个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客

个人专栏:http://t.csdnimg.cn/ZxuNL

                 http://t.csdnimg.cn/c9twt


前言:这个专栏主要讲述递归递归、搜索与回溯算法,所以下面题目主要也是这些算法做的  

我讲述题目会把讲解部分分为3个部分:
1、题目解析

2、算法原理思路讲解

3、代码实现
 


一、计算布尔二叉树的值

题目链接:计算布尔二叉树的值

题目:

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

  • 叶子节点 要么值为 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、叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True 。

2、非叶子节点 要么值为 2 要么值为 3 ,其中 2 表示逻辑或 OR(||) ,3 表示逻辑与 AND (&&)

那么这道题的意思,就是先将两个叶子节点中的布尔值与他们的父亲节点的逻辑运算符计算

如下图:


 算法原理思路讲解 

注意:我们在做递归这一类题目是要将递归看作一个黑盒,我们不管他是如何实现的,我们就相信他一定可以帮助我们完成目标

递归思路:
1、设计函数头(寻找重复子问题,并且将递归函数看作一个黑盒)。

2、设计函数体(只关心一个子问题,并解决它)

3、设计函数出口(递归的终止条件)

算法思路:

根据题目意思可得,我们先要遍历到两个叶子节点,再到他们的父亲节点。我们一看到这里,我们应该就可以立刻想到使用一个后序遍历即可解决

 1、设计函数头

我们可以设计一个递归函数,参数是一个树的根,返回计算后的布尔值

bool dfs(TreeNode* root);

2、设计函数体(只关心一个子问题,并解决它)

(1)求出左子树的布尔值

(2)求出右子树的布尔值

(3)利用左右子树的布尔值求出最后返回的布尔值

bool left = dfs(root->left);
bool right = dfs(root->right);
return root->val == 2 ? left || right : left && right;

3、设计函数出口

当他左右子树为空时,就可以返回他本身的布尔值了。

 if (root->left == nullptr){return root->val == 0 ? false : true;}

以上思路就讲解完了,大家可以先自己先做一下


  • 时间复杂度:O(n),其中 n 表示树中节点的数目。对于每个节点我们只需遍历一次即可,因此时间复杂度为 O(n)。
  • 空间复杂度:O(n),其中 n 表示树中节点的数目。按照题目要求,含有 n 个节点的完整二叉树的深度最多为 n/2 ,最少为 O(log⁡n),因此递归的最大深度为 n/2,因此空间复杂度为O(n)。

代码实现 

/*** 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:bool evaluateTree(TreeNode* root) {if (root->left == nullptr){return root->val == 0 ? false : true;}bool left = evaluateTree(root->left);bool right = evaluateTree(root->right);return root->val == 2 ? left || right : left && right;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/204715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cache教程1.LRU 缓存淘汰策略

这一节实现LRU算法&#xff0c;要理解明白其使用的数据结构。 FIFO/LFU/LRU 算法简介 Cache的缓存全部存储在内存中&#xff0c;内存是有限的&#xff0c;因此不可能无限制地添加数据。当占用内存超过了给定的内存大小时候&#xff0c;就需要从缓存中移除一条或多条数据了。我…

Xilinx FPGA平台DDR3设计详解(三):DDR3 介绍

本文介绍一下常用的存储芯片DDR3&#xff0c;包括DDR3的芯片型号识别、DDR3芯片命名、DDR3的基本结构等知识&#xff0c;为后续掌握FPGA DDR3的读写控制打下坚实基础。 一、DDR3芯片型​号 电路板上的镁光DDR3芯片上没有具体的型号名。 ​如果想知道具体的DDR3芯片型号&#…

rename--一些例子与问题

指令 A 和指令 B之间存在先写后读(RAW)的相关性 指令 B 的源寄存器 r0 来自于指令 A 产生的结果因此在进行寄存器重命名的时候&#xff0c;指令 B 的 r0 对应的物理寄存器应该直接来自于指令A所对应的P30,而不应该来自于从RAT读取的值。指令A,B,D之间存在先写后写(WAW)的相关性…

阿里云效部署前后端

静态站点到OSS 阿里云-云效&#xff0c;阿里云企业级一站式 DevOps&#xff0c;可以免费使用&#xff08;会限制人数、流水线数量等&#xff0c;个人项目够用了&#xff09;。相关文章 CI 持续集成 - 阿里云云效 OSS 是对象存储的意思&#xff0c;一般一个项目对应一个 Bucke…

20231202年江西省“振兴杯”网络信息行业(信息安全测试员)职业技能竞赛

C1-xor chall.py from flag import flagdef encrypt(x, y):keyzxbresultfor i in range(len(x)):resultchr(ord(x[i])^ord(y[i])^ord(key[i%3]))return result x flag y flag[1:] flag[0]enc open(flag.enc, wb) enc.write(encrypt(x, y)) enc.close()简单的异或&#xf…

Java API接口强势对接:构建高效稳定的系统集成方案

文章目录 1. Java API接口简介2. Java API接口的优势2.1 高度可移植性2.2 强大的网络通信能力2.3 多样化的数据处理能力 3. 实战&#xff1a;Java API接口强势对接示例3.1 场景描述3.2 用户管理系统3.3 订单处理系统3.4 系统集成 4. 拓展&#xff1a;Java API接口在微服务架构中…

LeetCode:1466. 重新规划路线(DFS C++、Java)

目录 1466. 重新规划路线 题目描述&#xff1a; 实现代码与解析&#xff1a; DFS 原理思路&#xff1a; 1466. 重新规划路线 题目描述&#xff1a; n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有…

智能优化算法应用:基于变色龙算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于变色龙算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于变色龙算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.变色龙算法4.实验参数设定5.算法结果6.参考文献7.…

Revisiting Proposal-based Object Detection阅读笔记

Revisiting Proposal-based Object Detection阅读笔记 论文地址&#xff1a;link Abstract For any object detector, the obtained box proposals or queries need to be classified and regressed towards ground truth boxes. 对于任何物体检测器来说&#xff0c;获得的…

Spring 声明式事务

Spring 声明式事务 1.Spring 事务管理概述1.1 事务管理的重要性1.2 Spring事务管理的两种方式1.2.1 编程式事务管理1.2.2 声明式事务管理 1.3 为什么选择声明式事务管理 2. 声明式事务管理2.1 基本用法2.2 常用属性2.2.1 propagation&#xff08;传播行为&#xff09;2.2.2 iso…

什么情况下会产生StackOverflowError(栈溢出)和OutOfMemoryError(堆溢出)怎么排查

目录 一、概念 栈溢出&#xff08;StackOverflowError&#xff09; 堆溢出&#xff08;OutOfMemoryError&#xff09; 二、排查方法 栈溢出&#xff08;StackOverflowError&#xff09; 堆溢出&#xff08;OutOfMemoryError&#xff09; 相关的Java代码示例 栈溢出 堆溢…

K8S pod无损上下线

在最近的K8s服务上线过程中&#xff0c;我发现了一些问题&#xff0c;更具体的说&#xff0c;我在使用阿里云k8s的过程中注意到&#xff1a;会出现slb短时RT增加&#xff0c;Pod部署初期就达到了扩容上限&#xff0c;并且开始大量的扩容&#xff0c;这无疑占用了大量的k8s资源。…

接口自动化测试之Yaml数据驱动封装!

一、数据驱动&#xff1a;pytest.mark.parametrize(&#xff09; 首先看个样本&#xff1a; import pytestclass TestData:# parametrize有两个值&#xff0c;一个是args_name:参数名&#xff0c;一个是args_value:参数值,可以有多个&#xff0c;进行数据解包# args_value可以…

【广州华锐互动VRAR】VR戒毒科普宣传系统有效提高戒毒成功率

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为人们的生活带来了前所未有的便利。在教育科普领域&#xff0c;VR技术的应用也日益广泛&#xff0c;本文将详细介绍广州华锐互动开发的VR戒毒科普宣传系统&#xff0…

serialVersionUID确保序列化版本

实现Serializable接口的目的是为类可持久化&#xff0c;比如在网络传输或本地存储&#xff0c;为系统的分布和异构部署提供先决条件。若没有序列化&#xff0c;现在我们所熟悉的远程调用&#xff0c;对象数据库都不可能存在&#xff0c; serialVersionUID适用于java序列化机制。…

万户协同办公平台ezoffice wpsservlet接口任意文件上传漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、漏洞描述 万户ezOFFICE协同管理平台是一个综合信息基础应用平台&am…

生成模型之Flow-Based model

Flow-Based Model 文章目录 Flow-Based Model简介总览数学基础jacobian matrixdeterminant行列式Change of variable theorem 架构常见几种方法coupling layer采用1*1卷积进行channel shuffle 简介 ​ Flow-Based对概率密度函数的直接建模&#xff0c;这使得它们在数据生成和推…

Ubuntu22.04 使用Docker部署Neo4j出错 Exited(70)

项目场景&#xff1a; 最近需要使用Neo4j图数据库&#xff0c;因此打算使用docker部署 环境使用WSL Ubuntu22.04 问题描述 拉下最新Neo4j镜像&#xff0c;执行命令部署 启动容器脚本 docker run -d -p 7474:7474 -p 7687:7687 \ --name neo4j \ --env "NEO4J_AUTHneo…

封装了一个顺滑嵌套滚动的框架

首先查看效果图 就是开始滚动的时候&#xff0c;上面的头部和下面的内容是 一起滚动的&#xff0c;但是当滚动到segment 的时候&#xff0c;segment 是悬停 的&#xff0c;下面的tableView是分区的 架构设计 我们设计一个架构&#xff0c;以下面的tablView为主体&#xff0…

SiC MOSFET体二极管双极性退化及电流密度影响的研究

标题&#xff1a;Investigation of the bipolar degradation of SiC MOSFET body diodes and the influence of current density (IEEE International Reliability Physics Symposium (IRPS)) 摘要 摘要-双极退化在使用双极操作模式的4H-SiC器件中仍然是一个需要考虑的关键问题…