【算法leetcode】2331. 计算布尔二叉树的值(多语言实现)
文章目录
- 2331. 计算布尔二叉树的值:
- 样例 1:
- 样例 2:
- 提示:
- 分析
- 题解
- rust
- go
- typescript
- python
- c
- c++
- java
- 原题传送门:https://leetcode.cn/problems/evaluate-boolean-binary-tree/
2331. 计算布尔二叉树的值:
给你一棵 完整二叉树 的根,这棵树有以下特征:
- 叶子节点 要么值为
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
。
分析
- 面对这道算法题目,二当家的陷入了沉思。
- 遍历树结构是必然的,递归套娃大法最直观。
题解
rust
// Definition for a binary tree node.
// #[derive(Debug, PartialEq, Eq)]
// pub struct TreeNode {// pub val: i32,
// pub left: Option<Rc<RefCell<TreeNode>>>,
// pub right: Option<Rc<RefCell<TreeNode>>>,
// }
//
// impl TreeNode {// #[inline]
// pub fn new(val: i32) -> Self {// TreeNode {// val,
// left: None,
// right: None
// }
// }
// }
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {pub fn evaluate_tree(root: Option<Rc<RefCell<TreeNode>>>) -> bool {let root = root.as_ref().unwrap().borrow();if root.left.is_none() {return root.val == 1;}if root.val == 2 {return Solution::evaluate_tree(root.left.clone()) || Solution::evaluate_tree(root.right.clone());}return Solution::evaluate_tree(root.left.clone()) && Solution::evaluate_tree(root.right.clone());}
}
go
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/
func evaluateTree(root *TreeNode) bool {if root.Left == nil {return root.Val == 1}if root.Val == 2 {return evaluateTree(root.Left) || evaluateTree(root.Right)}return evaluateTree(root.Left) && evaluateTree(root.Right)
}
typescript
/*** Definition for a binary tree node.* class TreeNode {* val: number* left: TreeNode | null* right: TreeNode | null* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }* }*/function evaluateTree(root: TreeNode | null): boolean {if (root?.left == null) {return root?.val == 1;}if (root.val == 2) {return evaluateTree(root.left) || evaluateTree(root.right);}return evaluateTree(root.left) && evaluateTree(root.right);
};
python
# 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.left is None:return root.val == 1if root.val == 2:return self.evaluateTree(root.left) or self.evaluateTree(root.right)return self.evaluateTree(root.left) and self.evaluateTree(root.right)
c
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/bool evaluateTree(struct TreeNode* root){if (root->left == NULL) {return root->val == 1;}if (root->val == 2) {return evaluateTree(root->left) || evaluateTree(root->right);}return evaluateTree(root->left) && evaluateTree(root->right);
}
c++
/*** 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 == NULL) {return root->val == 1;}if (root->val == 2) {return evaluateTree(root->left) || evaluateTree(root->right);}return evaluateTree(root->left) && evaluateTree(root->right);}
};
java
/*** 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 == 1;}if (root.val == 2) {return evaluateTree(root.left) || evaluateTree(root.right);}return evaluateTree(root.left) && evaluateTree(root.right);}
}
原题传送门:https://leetcode.cn/problems/evaluate-boolean-binary-tree/
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
【算法leetcode】2331. 计算布尔二叉树的值(多语言实现)相关推荐
- LeetCode 2331. 计算布尔二叉树的值(树的遍历)
文章目录 1. 题目 2. 解题 1. 题目 给你一棵 完整二叉树 的根,这棵树有以下特征: 叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True . 非叶子节点 ...
- 2331. 计算布尔二叉树的值-深度优先遍历
2331. 计算布尔二叉树的值 给你一棵 完整二叉树 的根,这棵树有以下特征: 叶子节点 要么值为 0 要么值为 1 ,其中 0 表示 False ,1 表示 True . 非叶子节点 要么值为 2 ...
- 2331. 计算布尔二叉树的值【划水刷题】
题目链接 2331. 计算布尔二叉树的值 思路 根据题意: 首先分两种条件搞,叶子节点和非叶子节点 叶子节点 判断本身值因为·1为true,0为false,直接返回本身值就行,那么问题就是怎么判断是否 ...
- 【深度优先搜索-简单】2331. 计算布尔二叉树的值
[题目] [代码] # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=No ...
- 49 - 算法 - LeetCode 110 平衡二叉树 - 求二叉树的高度 -双重递归
// 求二叉树的高度函数 nullptr为0 然后累加 +1 return left-right // 结论都还是递归 当前状态 多加了一个递归求高度 双重递归 class Solution {pub ...
- 49 - 算法 - Leetcode 112 路径总和 -二叉树递归 带参数一起递归
// 感觉都是那几个固定的格式 寻找临时 单前树 状态输入减小 int sum递减 //树递归 所带的参数也递归减少class Solution {public:bool hasPathSum(Tre ...
- 蒙特卡洛算法举例,计算阴影部分面积MATLAB和C语言实现
计算阴影部分面积. 一个古人要求一个图形的面积,他把图形画在一块方形布上,然后找来一袋豆子,然后将所有豆子洒在布上,落在图形内豆子的重量比上那块布上所有豆子的重量再乘以布的面积就是他所要求的图形的面 ...
- 关联规则算法php,科学网—加权关联规则权值的计算 - 叶文菁的博文
加权关联规则挖掘(以apriori和fp-tree算法为例)的权值计算. 以下面的数据为例来进行说明,表2中的交易权重和归一化权重只是截图结果,这里的具体数值可不要考虑. 加权支持度的计算为Sup(B ...
- 小蚂蚁学习数据结构(26)——题目——输出二叉树上值大于x的算法
2019独角兽企业重金招聘Python工程师标准>>> 题目要求: 设二叉树以二叉链表的形式存储,有关类型定义如下: typedef struct BiTNode{ int data ...
最新文章
- DLL+ ActiveX控件+WEB页面调用例子
- String类为什么是final
- 深究AngularJS——ng-checked(回写:带真实案例代码)
- ABAP 锁对象与加锁机制
- pandas 按字符串肚脐眼 读取数据_十分钟学习pandas! pandas常用操作总结!
- 李刚的《疯狂Java讲义》
- LVDS的接口电路设计
- ssm + layui + poi+ 自定义注解 + java反射 做条件导出Excel 工具类
- 计算机上显示找不到无线网络连接,电脑上网时为什么只显示宽带连接不显示无线网络连接?...
- 计算机函数sumif实例,Excel2019中SUMIF函数的语法及使用方法与实例
- 群晖Docker青龙面板部署方法V2.11.0
- 阿里云80 端口别阿里云盾占用
- 如何清空python的IDLE?
- python语言的标准库有哪些,python标准库函数有哪些
- 景深决定照相机什么特性_什么叫光圈,什么叫景深 什么叫F值 什么叫单反相机?...
- mysql fnv64函数_FNV哈希算法 - osc_tiaoycd5的个人空间 - OSCHINA - 中文开源技术交流社区...
- c陷进与缺陷笔记(5)
- oracle 五笔码函数,如何根据单元格汉字自动生成拼音码和五笔码
- 东芝笔记本linux系统安装驱动,笔记本驱动,小编教你东芝笔记本无线网卡驱动怎么安装...
- 瑞利信道下基于判决反馈的16QAM信道均衡(matlab源码)