​力扣解法汇总2331. 计算布尔二叉树的值

news/2024/7/7 19:22:15

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

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

  • 叶子节点 要么值为 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 。

解题思路:

* 解题思路:
* 如果val小于2,则根据val==1判断。
* 如果val等于2,则递归求left和right的结果,并且进行OR运算。
* 如果val等于3,则进行AND的运算

 

 

代码:

public class Solution2331 {

    public boolean evaluateTree(TreeNode root) {
        if (root.val < 2) {
            return root.val == 1;
        }
        if (root.val == 2) {
            return evaluateTree(root.left) | evaluateTree(root.right);
        }
        return evaluateTree(root.left) & evaluateTree(root.right);
    }
}

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

相关文章

map c++

C++ map用法总结(整理) 1,map简介 map是STL的一个关联容器,它提供一对一的hash。 第一个可以称为关键字(key),每个关键字只能在map中出现一次; 第二个可能称为该关键字的值(value); map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主…

Vue3(快速上手)

Vue2 与 Vue3 的区别 数据双向数据绑定 Vue2.0 数据绑定 是通过 Object.defineProperty 来劫持对象属性的 geter 和 seter 操作&#xff0c;当数据发生改变发出通知 Object.defineProperty详解 // 数据 let data {title: ,// 备份数据_data: {} } // 定义特性 Object.define…

python之selenium的switch_to

我们在浏览器操作页面时&#xff0c;经常遇到打开新标签页的情况&#xff0c;但是在selenium的WebDriver对象中&#xff0c;只对当前get()打开的标签页生效&#xff0c;页面操作中打开的新标签页是不会更新到WebDriver对象中的&#xff0c;所以需要自己将WebDriver对象指定到新…

【C++学习】基础语法(二)

在C语言中&#xff0c;为了增强代码的复用性、提高性能提出了宏&#xff0c;但宏也存在着调试不方便、没有类型的安全检查、代码可读性差及可维护性差的缺陷。在C中&#xff0c;引入内联函数实现宏定义的功能&#xff08;宏函数&#xff09;&#xff0c;并针对宏定义的缺陷进行…

利用appium自动控制移动设备并提取数据

利用appium自动控制移动设备并提取数据 学习目标 了解 appium-python-client模块定位元素以及提取其文本内容的方法了解 appium-python-client模块控制滑动动作的方法 以控制抖音app滑动并获取抖音短视频发布者昵称和点赞数等信息为例 2.1 安装appium-python-client模块并启动…

【Java 并发编程】volatile 、synchronized 与 lock 可见性、有序性、原子性大杀器

volatile 、synchronized 与 lock 可见性、有序性、原子性大杀器 在 Java 内存模型 & 并发问题本质 一文中我们已经了解到所有的并发问题的本质在于&#xff1a; 多核 CPU 时代的数据可见性问题编译优化带来的有序性问题线程切换带来的原子性问题 在实际开发中该如何解决…

【软件测试面试】测试开发一面面试题+回答,大伙感受下强度咋样......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测开一面面试题&…

java并发编程(并发编程的三个问题)

什么是并发编程?首先我们要知道什么是并发? 什么是并行?并行: 多件事情在同一时刻同时发生并发: 在同一时间内,多个事情交替执行并发编程: 比如抢票,秒杀等在同一场景下,有大量的请求访问同一资源, 会出现一些安全性的问题,所以要通过编程来控制多个线程依次访问资源,称为并…