본문 바로가기

LeetCode

563. Binary Tree Tilt

Given the root of a binary tree, return the sum of every tree node's tilt.

The tilt of a tree node is the absolute difference between the sum of all left subtree node values and all right subtree node values. If a node does not have a left child, then the sum of the left subtree node values is treated as 0. The rule is similar if the node does not have a right child.

 

Example 1:

Input: root = [1,2,3]
Output: 1
Explanation: 
Tilt of node 2 : |0-0| = 0 (no children)
Tilt of node 3 : |0-0| = 0 (no children)
Tilt of node 1 : |2-3| = 1 (left subtree is just left child, so sum is 2; right subtree is just right child, so sum is 3)
Sum of every tilt : 0 + 0 + 1 = 1

Example 2:

Input: root = [4,2,9,3,5,null,7]
Output: 15
Explanation: 
Tilt of node 3 : |0-0| = 0 (no children)
Tilt of node 5 : |0-0| = 0 (no children)
Tilt of node 7 : |0-0| = 0 (no children)
Tilt of node 2 : |3-5| = 2 (left subtree is just left child, so sum is 3; right subtree is just right child, so sum is 5)
Tilt of node 9 : |0-7| = 7 (no left child, so sum is 0; right subtree is just right child, so sum is 7)
Tilt of node 4 : |(3+5+2)-(9+7)| = |10-16| = 6 (left subtree values are 3, 5, and 2, which sums to 10; right subtree values are 9 and 7, which sums to 16)
Sum of every tilt : 0 + 0 + 0 + 2 + 7 + 6 = 15

Example 3:

 

Input: root = [21,7,14,1,1,2,2,3,3]
Output: 9

 

 

출처 : https://leetcode.com/problems/binary-tree-tilt/description/

 

 

풀이

function Sum(root: TreeNode | null): number {
  return root ? root.val + Sum(root.left) + Sum(root.right) : 0
}

function findTilt(root: TreeNode | null): number {
    let sum = 0

    const helper = (head: TreeNode | null) => {
        if(!head){
            return
        }
        sum += Math.abs(Sum(head.left) - Sum(head.right))
        helper(head.left)
        helper(head.right)
    }

    helper(root)
    return sum;
}

 

 

Sum 함수

  • 주어진 이진 트리 또는 서브트리의 모든 노드 값의 합을 계산

 

findTilt 함수

  • 이진 트리의 전체 기울기를 계산
  • 트리의 기울기란 각 노드의 왼쪽 서브트리와 오른쪽 서브트리의 합의 차이의 절댓값을 합한 것