Solving Leetcode Interviews in Seconds with AI: Sum of Nodes with Even-Valued Grandparent
Introduction
In this blog post, we will explore how to solve the LeetCode problem "1315" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.
Problem Statement
Given the root of a binary tree, return the sum of values of nodes with an even-valued grandparent. If there are no nodes with an even-valued grandparent, return 0. A grandparent of a node is the parent of its parent if it exists. Example 1: Input: root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5] Output: 18 Explanation: The red nodes are the nodes with even-value grandparent while the blue nodes are the even-value grandparents. Example 2: Input: root = [1] Output: 0 Constraints: The number of nodes in the tree is in the range [1, 104]. 1 <= Node.val <= 100
Explanation
Here's the breakdown of the solution:
- Recursive Depth-First Search (DFS): Traverse the tree using a recursive DFS approach to visit each node.
- Grandparent Check: At each node, check if its grandparent exists and has an even value. If so, add the current node's value to the running sum.
Passing Parent and Grandparent Values: Maintain the parent and grandparent values during the recursive calls to efficiently determine if the grandparent is even-valued.
Runtime Complexity: O(N), where N is the number of nodes in the tree.
- Storage Complexity: O(H), where H is the height of the tree (call stack in recursion). In the worst case (skewed tree), H can be N. In the best case (balanced tree), H is log(N).
Code
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def sumEvenGrandparent(root: TreeNode) -> int:
"""
Calculates the sum of values of nodes with an even-valued grandparent.
"""
def dfs(node: TreeNode, parent_val: int, grandparent_val: int) -> int:
"""
Recursive helper function for depth-first search.
"""
if not node:
return 0
sum_of_values = 0
if grandparent_val % 2 == 0:
sum_of_values += node.val
sum_of_values += dfs(node.left, node.val, parent_val)
sum_of_values += dfs(node.right, node.val, parent_val)
return sum_of_values
return dfs(root, 1, 1) # Initialize parent and grandparent values to 1 (odd)