LeetCode Entry
2265. Count Nodes Equal to Average of Subtree
Values equal subtree average
2265. Count Nodes Equal to Average of Subtree medium substack youtube
https://dmitrysamoylenko.com/leetcode/

Join me on Telegram
https://t.me/leetcode_daily_unstoppable/1478
Problem TLDR
Values equal subtree average
Intuition
Solve for subtree: count, sum, result
Approach
- pack two values into a single 32-bit int
- reuse the function by storing data in the tree itself
Complexity
-
Time complexity: \(O(n)\)
-
Space complexity: \(O(n)\)
Code
fun averageOfSubtree(r: TreeNode?): Int = r?.run {
val v = `val`
val res = averageOfSubtree(left) + averageOfSubtree(right)
`val` = (left?.`val` ?: 0) + (right?.`val` ?: 0) + 1 + v * 1024
res + if (v == `val` / 1024 / (`val` % 1024)) 1 else 0
} ?: 0
pub fn average_of_subtree(r: Option<Rc<RefCell<TreeNode>>>) -> i32 {
let Some(n) = r else {return 0}; let mut b = n.borrow_mut(); let v = b.val;
let [l, r] = [&b.left, &b.right].map(|c|
(Self::average_of_subtree(c.clone()), c.as_ref().map_or(0, |x| x.borrow().val)));
let (c, s) = (l.1 % 1024 + r.1 % 1024 + 1, l.1 / 1024 + r.1 / 1024 + v);
b.val = s * 1024 + c; l.0 + r.0 + (v == s / c) as i32
}
Comments