首页 > 其他分享 > [leetcode每日一题]2.9

[leetcode每日一题]2.9

时间:2023-02-09 18:31:36浏览次数:57  
标签:cur val 每日 节点 self 2.9 root leetcode left

​2331. 计算布尔二叉树的值​

难度简单66

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

  • 叶子节点 要么值为 ​​0​​ 要么值为 ​​1​​ ,其中 ​​0​​ 表示 ​​False​​ ,​​1​​ 表示 ​​True​​ 。
  • 非叶子节点 要么值为 ​​2​​ 要么值为 ​​3​​ ,其中 ​​2​​ 表示逻辑或 ​​OR​​ ,​​3​​ 表示逻辑与 ​​AND​​ 。

计算 一个节点的值方式如下:

  • 如果节点是个叶子节点,那么节点的  为它本身,即 ​​True​​ 或者 ​​False​​ 。
  • 否则,计算 两个孩子的节点值,然后将该节点的运算符对两个孩子值进行 运算 。

返回根节点 ​root​​ 的布尔运算值。

完整二叉树 是每个节点有 ​​0​​ 个或者 ​​2​​ 个孩子的二叉树。

叶子节点 是没有孩子的节点。

示例 1:

 [leetcode每日一题]2.9_二叉树

输入: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​​ 。

Solution

递归。

这是改变节点值的递归:

# 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:
def dfs(cur):
if cur.left:
dfs(cur.left)
dfs(cur.right)
else:
return
if cur.val == 2:
cur.val = cur.left.val | cur.right.val
else:
cur.val = cur.left.val & cur.right.val
dfs(root)
return root.val != 0

这是题解的做法,不会改变节点的值。

class Solution:
def evaluateTree(self, root: Optional[TreeNode]) -> bool:
if root.left is None:
return root.val == 1
if root.val == 2:
return self.evaluateTree(root.left) or self.evaluateTree(root.right)
return self.evaluateTree(root.left) and self.evaluateTree(root.right)

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/evaluate-boolean-binary-tree/solution/ji-suan-bu-er-er-cha-shu-de-zhi-by-leetc-4g8f/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:cur,val,每日,节点,self,2.9,root,leetcode,left
From: https://blog.51cto.com/u_15763108/6047266

相关文章

  • 20230112_每日学习记录
    20230112Notepad++使用技巧之--把没有html规范格式的html文本变成有缩进的规范格式:下载插件XMLToolsrestartNotepad++选中文本,使用快捷键:Ctrl+Shift+Alt+......
  • Vue2.9.6安装element-ui
    阅读目录安装element-ui源码路由文件:E:\node\vue296\src\router\index.js入口:E:\node\vue296\src\main.js组件:E:\node\vue296\src\components\Count.vue......
  • [LeetCode] 1797. Design Authentication Manager
    Thereisanauthenticationsystemthatworkswithauthenticationtokens.Foreachsession,theuserwillreceiveanewauthenticationtokenthatwillexpire t......
  • LeetCode 组合总和(/回溯+剪枝)
    原题解题目约束题解不剪枝classSolution{public:voiddfs(vector<int>&candidates,inttarget,vector<vector<int>>&ans,vector<int>&combine,......
  • 2.K个排序链表归并(Leetcode 23)
    方法一:#include<stdio.h>structListNode{ intval; ListNode*next; ListNode(intx):val(x),next(NULL){}};#include<vector>#include<algorithm>b......
  • 3.链表划分(Leetcode 86)
    3.链表划分(Leetcode86)#include<stdio.h> structListNode{ intval; ListNode*next; ListNode(intx):val(x),next(NULL){}};classSolution{public:......
  • 4.反转链表 ||(Leetcode 92)
    4.反转链表||(Leetcode92)#include<stdio.h>structListNode{ intval; ListNode*next; ListNode(intx):val(x),next(NULL){}};classSolution{public:......
  • 5.复杂链表的深度拷贝(Leetcode 138)
    5.复杂链表的深度拷贝(Leetcode138) #include<stdio.h> structRandomListNode{ intlabel; RandomListNode*next,*random; RandomListNode(intx):label(x),......
  • 6.链表求环||(Leetcode 42)
    6.链表求环||(Leetcode42)方法一:#include<stdio.h>structListNode{ intval; ListNode*next; ListNode(intx):val(x),next(NULL){}};#include<set>cl......
  • 7.两个排序链表的交点(Leetcode 160)
    7.两个排序链表的交点(Leetcode160)方法一:#include<stdio.h>structListNode{ intval; ListNode*next; ListNode(intx):val(x),next(NULL){}};#include......