算法刷题打卡第82天:计算布尔二叉树的值

news/2024/11/25 16:37:34/

计算布尔二叉树的值

难度:简单

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

  • 叶子节点 要么值为 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返回结果,相当于转换为 TrueFalse
  • 若当前节点不是叶子节点,则递归查询其左右子节点,并以当前节点的逻辑对左右节点做运算。

复杂度分析:

  • 时间复杂度: O(n)O(n)O(n),递归过程中将整个树遍历一遍。
  • 空间复杂度: O(n)O(n)O(n),递归过程中需要将利用到栈,由于是完整二叉树最小深度为 lognlognlogn,即完全二叉树,最大深度为 n/2,即单向左或右衍生,因此复杂度为 O(n)O(n)O(n)
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def evaluateTree(self, root: Optional[TreeNode]) -> bool:if root.val == 0 or root.val == 1:return root.val == 1left, right = self.evaluateTree(root.left), self.evaluateTree(root.right)return left or right if root.val == 2 else left and right

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/evaluate-boolean-binary-tree


http://www.ppmy.cn/news/22772.html

相关文章

实现加盐加密

实现加盐加密存储密码1. MD52. 加盐加密实现:1)修改 password 为 64 位字符串2)创建 SecurityUtil 类 (加盐加密类)应用存储密码 1. MD5 Spring 提供了库 import org.springframework.util.DigestUtils; ,我们可以进行 MD5 加密&…

react源码中的生命周期和事件系统

这一章我想跟大家探讨的是React的生命周期与事件系统。 jsx的编译结果 因为前面也讲到jsx在v17中的编译结果,除了标签名,其他的挂在标签上的属性(比如class),事件(比如click事件),都…

Attention-自注意机制

Attention-自注意机制 Attention 可以大幅提升seq2seq的遗忘问题。有了Attention,Seq2Seq 模型不会忘记源输入,且decoder解码器就知道该把注意力集中在哪里。 缺点: 计算量大得多 Original paper: • Bahdanau,Cho,& Bengio. Neural machine trans…

React中的jsx语法转换后生成虚拟DOM,再挂载到真实的DOM中的全过程讲解

前言 react中的jsx语法很多伙伴都会使用, 但是你知道它的本质是什么吗?运行中它会做如何的转换呢?jsx内部又是怎么生成了虚拟DOM?虚拟DOM又是如何挂载到真实DOM上去的呢? 带着这些问题,我们做个讲解把&…

python图形化开发教程

简介学习此教程必须先学习python入门教程( Python入门教程_恰到好处a的博客-CSDN博客)PySimpleGUI这个模块需要安装,在cmd输入pip install PySimpleGUI,在python中验证安装:输入import PySimpleGUI,看一看是否正常引入…

Android boot.img dtb.img 编译过程

最近做RK3588案子,修改dts后,导致boot.img过大,编译出错,整体分析下boot.img过大的原因是因为在打包boot.img过程中,dbt.img过大导致,所以整体分析下boot.img编译过程,尤其是dbt.img的生成过程.boot.img生成过程在Andorid跟目录下执行, source build/envsetup.sh 然后lunch xx(…

科技云报道:上云尚未成功,“下云潮”已悄然来临?

科技云报道原创。 云计算一直被视为是企业数字化转型的底座,很多企业都在通过加速数字化转型应对市场环境的动荡变化,一手抓降本增效,另一手也还在继续谋求突破式创新。 然而,经历这两年的疫情,活下去成为每一个企业的…

GBDT+LR算法解析及Python实现

1. GBDT LR 是什么 本质上GBDTLR是一种具有stacking思想的二分类器模型,所以可以用来解决二分类问题。 。 2. GBDT LR 用在哪 GBDTLR 使用最广泛的场景是CTR点击率预估,即预测当给用户推送的广告会不会被用户点击。 点击率预估模型涉及的训练样本一…