Learn DSA
Two Pointers
Sliding Window
Intervals
Stack
Linked List
Binary Search
Heap
Depth-First Search
Breadth-First Search
Backtracking
Graphs
Dynamic Programming
Greedy Algorithms
Trie
Prefix Sum
Matrices
Calculate Tilt
DESCRIPTION (credit Leetcode.com)
Given the root node of a binary tree, write a recursive function to return the sum of each node's tilt.
The tilt of a node is the absolute difference between the sum of its left subtree and the sum of its right subtree. If a node has an empty left or subtree, the sum of the empty subtree is 0.
EXAMPLES
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
Run your code to see results here
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
Loading comments...