【LeetCode每日一题】【2023/2/6】2331. 计算布尔二叉树的值

news/2024/7/7 23:33:00

文章目录

  • 2331. 计算布尔二叉树的值
    • 方法1:递归


2331. 计算布尔二叉树的值

LeetCode: 2331. 计算布尔二叉树的值

简单 \color{#00AF9B}{简单} 简单

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

  • 叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False1 表示 True
  • 非叶子节点 要么值为 2 要么值为 3 ,其中 2 表示逻辑或 OR3 表示逻辑与 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
  • 每个节点的孩子数为 02
  • 叶子节点的值为 01
  • 非叶子节点的值为 23

方法1:递归

递归调用题中所给的 evaluateTree() 函数,遍历树中结点。每次访问结点 node 时,会出现以下3种情况:

  1. 当前结点 node 无孩子结点,则返回 node 的值。
  2. node 有孩子结点,且 node 的值为 2 ,则递归调用,返回两个孩子结点的 或操作 结果。
  3. node 有孩子结点,且 node 的值为 3 ,则递归调用,返回两个孩子结点的 与操作 结果。
class Solution
{
public:
	bool evaluateTree(const TreeNode* root)
	{
		if (root->left == nullptr)
			return root->val;

		if (root->val == 2)
			return evaluateTree(root->left) || evaluateTree(root->right);
		else
			return evaluateTree(root->left) && evaluateTree(root->right);
	}
};

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)。其中, n n n 为树中结点的数目,每个结点都会被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n)

参考结果

Accepted
75/75 cases passed (16 ms)
Your runtime beats 34.45 % of cpp submissions
Your memory usage beats 23.81 % of cpp submissions (14.7 MB)

http://lihuaxi.xjx100.cn/news/821430.html

相关文章

[ 2204阅读 ] 真题 - 6

Part 3 真题 Passage The Rise of Florence Paragraph 1 In the Central Middle Ages, starting around 1000 A.D., a number of northern Italian cities, including Venice and Genoa, rode a wave of economic and population growth that saw them become among the most…

【成为架构师课程系列】性能优化技术之“池化技术”:如何减少频繁创建数据库连接的性能损耗?

池化技术:如何减少频繁创建数据库连接的性能损耗? tcpdump 抓包工具 在前面几节课程中,我从宏观的角度带你了解了高并发系统设计的基础知识,你已经知晓了,我们系统设计的目的是为了获得更好的性能、更高的可用性,以及更强的系统扩展能力。 那么从这一讲开始,我们正式…

0基础使用Vite+Vue3创建项目

什么是 Vue&#xff1f; Vue是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 声明式…

Java网络编程原理及应用

Java网络编程网络编程概述Socket简介底层数据结构TCP可靠性传输三次握手四次挥手TCP编程UDPUDP编程网络编程概述 网络编程是指在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;可以进行数据的传输与交互。 网络编程三要素&#xff1a; 要素说明IP地址网络设备…

C# 基础知识(一)_简介及开发环境

目录 C# 基础知识(一)_简介及开发环境 C#简介 C# 之所以能称为一门被广泛应用的编程语言&#xff0c;原因有以下几点 C# 强大的编程功能 C# 开发环境 名词解释&#xff08;一定要清楚&#xff0c;否则名称乱糟糟的&#xff09; IDE C# 基础知识(一)_简介及开发环境 C#简介…

Codeforces Round #850(div1.div2)

Problem - A1 - Codeforces Non-alternating Deck (easy version) 思路&#xff1a; 我们可以发现每次交换玩家发牌数增加 4 &#xff0c;那么我们用一个变量 f 来标记当前应该给谁发牌。每次发 i 张牌就从牌堆减去 i 。最后剩下的 n 张牌再判断 f 发牌即可。 参考代码&#…

深度学习Week14-yolov5s.yaml文件解读(YOLOv5)

这周接着详细解析小白YOLOv5全流程-训练实现数字识别_牛大了2022的博客-CSDN博客_yolov5识别数字&#xff0c;上周入门教大家下载配置环境&#xff0c;如果没有的话请参考上一篇的文章深度学习Week12-训练自己的数据集&#xff08;YOLOv5&#xff09;_牛大了2022的博客-CSDN博客…

现货黄金白银操作建议

在投资市场发达、投资品种多样的国外&#xff0c;很多人会去订阅一些现货黄金白银操作建议&#xff0c;但是这种情况会适合中国国内吗&#xff1f;我看未必&#xff0c;在国外&#xff0c;现货黄金白银操作建议这种类似的订阅产品是有版权的&#xff0c;订阅是收费的&#xff0…