All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g2301_2400.s2331_evaluate_boolean_binary_tree.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g2301_2400.s2331_evaluate_boolean_binary_tree;

// #Easy #Depth_First_Search #Tree #Binary_Search
// #2022_07_10_Time_0_ms_(100.00%)_Space_46.1_MB_(85.71%)

import com_github_leetcode.TreeNode;

/**
 * 2331 - Evaluate Boolean Binary Tree\.
 *
 * Easy
 *
 * You are given the `root` of a **full binary tree** with the following properties:
 *
 * *   **Leaf nodes** have either the value `0` or `1`, where `0` represents `False` and `1` represents `True`.
 * *   **Non-leaf nodes** have either the value `2` or `3`, where `2` represents the boolean `OR` and `3` represents the boolean `AND`.
 *
 * The **evaluation** of a node is as follows:
 *
 * *   If the node is a leaf node, the evaluation is the **value** of the node, i.e. `True` or `False`.
 * *   Otherwise, **evaluate** the node's two children and **apply** the boolean operation of its value with the children's evaluations.
 *
 * Return _the boolean result of **evaluating** the_ `root` _node._
 *
 * A **full binary tree** is a binary tree where each node has either `0` or `2` children.
 *
 * A **leaf node** is a node that has zero children.
 *
 * **Example 1:**
 *
 * ![](https://assets.leetcode.com/uploads/2022/05/16/example1drawio1.png)
 *
 * **Input:** root = [2,1,3,null,null,0,1]
 *
 * **Output:** true
 *
 * **Explanation:** The above diagram illustrates the evaluation process.
 *
 * The AND node evaluates to False AND True = False.
 *
 * The OR node evaluates to True OR False = True.
 *
 * The root node evaluates to True, so we return true.
 *
 * **Example 2:**
 *
 * **Input:** root = [0]
 *
 * **Output:** false
 *
 * **Explanation:** The root node is a leaf node and it evaluates to false, so we return false. 
 *
 * **Constraints:**
 *
 * *   The number of nodes in the tree is in the range `[1, 1000]`.
 * *   `0 <= Node.val <= 3`
 * *   Every node has either `0` or `2` children.
 * *   Leaf nodes have a value of `0` or `1`.
 * *   Non-leaf nodes have a value of `2` or `3`.
**/
public class Solution {
    public boolean evaluateTree(TreeNode root) {
        if (root.left == null) {
            return root.val == 1;
        } else {
            if (root.val == 2) {
                return evaluateTree(root.left) || evaluateTree(root.right);
            } else {
                return evaluateTree(root.left) && evaluateTree(root.right);
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy