• 【算法leetcode】2331. 计算布尔二叉树的值(多语言实现)




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

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

    • 叶子节点 要么值为 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 。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    样例 2:

    输入:
    	root = [0]
    	
    输出:
    	false
    	
    解释:
    	根节点是叶子节点,且值为 false,所以我们返回 false 。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    提示:

    • 树中节点数目在 [1, 1000] 之间。
    • 0 <= Node.val <= 3
    • 每个节点的孩子数为 02
    • 叶子节点的值为 01
    • 非叶子节点的值为 23

    分析

    • 面对这道算法题目,二当家的陷入了沉思。
    • 遍历树结构是必然的,递归套娃大法最直观。

    题解

    rust

    // Definition for a binary tree node.
    // #[derive(Debug, PartialEq, Eq)]
    // pub struct TreeNode {
    //   pub val: i32,
    //   pub left: Option>>,
    //   pub right: Option>>,
    // }
    //
    // 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());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    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)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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);
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    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 == 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)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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);
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    原题传送门:https://leetcode.cn/problems/evaluate-boolean-binary-tree/


    非常感谢你阅读本文~
    欢迎【点赞】【收藏】【评论】~
    放弃不难,但坚持一定很酷~
    希望我们大家都能每天进步一点点~
    本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


  • 相关阅读:
    软件工程(Software Engineering)
    读取SolidWorks文档中的属性,生成PDF(工具开发)
    configure: error: library ‘crypto‘ is required for OpenSSL
    如何做接口测试呢?接口测试有哪些工具
    从零开始写 Docker(十八)---容器网络实现(下):为容器插上”网线“
    cadence SPB17.4 - 中文UI设置
    Oracle数据库:oracle内连接inner join on,多表查询各种自链接、内连接、外连接的练习示例
    【SA8295P 源码分析 (一)】60 - QNX Host 如何新增 android_test 分区给 Android GVM 挂载使用
    【VIM】VIM中的保存和退出、VIM退出命令、如何退出vim编辑、VIM命令大全
    Three.js-着色器加工材质及材质着色器详解
  • 原文地址:https://blog.csdn.net/leyi520/article/details/125748080