Depth-First Search
Calculate Tilt
DESCRIPTION (credit Leetcode.com)
Given the root node of a binary tree, write a recursive function to return the sum of all node tilts in the tree.
The tilt of a node is calculated as the absolute difference between the sum of all values in its left subtree and the sum of all values in its right subtree. For nodes that are missing a left child, right child, or both, treat the missing subtree as having a sum of 0.
For example, a leaf node has a tilt of 0 because both its left and right subtrees are empty (sum = 0), so the absolute difference is |0 - 0| = 0.
Example 1:
Input:
[5, 1, 3]
Output:
2
The leaf nodes 1, 3 have tilts of 0 (their left and right subtrees are empty)
The root node 5 has a tilt of |1 - 3| = 2
Example 2:
Input:
[4, 2, 7, 1, 3, 6, 9]
Output:
21
The leaf nodes 1, 3, 6, 9 have tilts of 0 (their left and right subtrees are empty)
Node 2 has a tilt of |1 - 3| = 2
Node 7 has a tilt of |6 - 9| = 3
Node 4 has a tilt of |6 - 22] = 16
2 + 3 + 16 = 21
Explanation
- The sum of the values in the left subtree.
- The sum of the values in the right subtree.
# get the sum of current node's left and right subtreesleft = dfs(node.left)right = dfs(node.right)# calculate tilt of current subtree and add it to the global tilt variabletilt += abs(left - right)# return the sum of the current subtreereturn left + right + node.val
Solution
class Solution:def findTilt(self, root: TreeNode) -> int:tilt = 0# define a helper function to perform the recursive calls# this ensures that the tilt variable is not accessible outside of the main functiondef dfs(node):nonlocal tilt# base caseif not node:return 0# get the sum of the current node's left and right subtreesleft = dfs(node.left)right = dfs(node.right)# calculate tilt of current subtree, and add it to the global tilt variabletilt += abs(left - right)# return the sum of the current subtreereturn left + right + node.val# initiate the call to the helper functiondfs(root)return tilt
Test Your Knowledge
Login to take the complexity quiz and track your progress
Complexity Analysis
Time Complexity: O(N) where N is the number of nodes in the tree. We visit each node exactly once, and at each node, we perform constant time work.
Space Complexity: O(N) where N is the number of nodes. A total of N call frames have to be allocated, one for each node in the tree.
Mark as read
Your account is free and you can post anonymously if you choose.