# Teaching Kids Programming – Recursive Depth First Search Algorithm to Evaluate the Boolean Binary Tree

Teaching Kids Programming – Recursive Depth First Search Algorithm to Evaluate the Boolean Binary Tree | ninjasquad

Teaching Kids Programming: Videos on Data Structures and Algorithms

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:

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.

### Recursive Depth First Search Algorithm to Evaluate the Boolean Binary Tree

We need to evaluate the leaf nodes first and then use the value to recursively evaluate the rest. This can be done easily via Recursion. See below Recursive Depth First Search Algorithm where we call the recursive function to obtain the value for the left and right subtrees respectively, and then based on the binary operator, we return the value for the current node.

If it is a leaf node, we can just return the value of itself. The time/space complexity is O(N) where N is the number of the nodes in the given boolean binary tree. Each node in the binary tree is visited once in the Recursion, and in the worst case, the calling stack step is N when the binary tree has only one child in each node.

 ```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ``` ```# 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 f(root):             if not root.left and not root.right:                 return root.val == 1             if root.val == 2:                 return f(root.left) or f(root.right)             return f(root.left) and f(root.right)                 return f(root)```
```# 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 f(root):
if not root.left and not root.right:
return root.val == 1
if root.val == 2:
return f(root.left) or f(root.right)
return f(root.left) and f(root.right)

return f(root)```

GD Star Rating

Source: Internet

We are offering free coding tuts

X