563. 이진 트리 기울기 🚀
솔루션 개발:
질문
이 기사에서는 Leetcode의 '563. Binary Tree Tilt' 질문을 다룰 것입니다.
의문:
Given the
root
of a binary tree, return thesum
of every tree node's tilt.
The tilt of a tree node is the absolute difference between thesum
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 as0
. The rule is similar if the node does not have a right child.
예시:
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
질문 설명
이 질문의 등급은 쉬움입니다. 나는 완전히 부정확하고 오해의 소지가 있다고 생각합니다.
이 질문은 중간 수준의 개념을 이해하는 경우에만 쉬운 것으로 간주될 수 있다고 생각합니다. 이진 트리를 합산하는 방법, 이진 트리를 순회하는 방법 및 재귀적으로 이진 트리를 순회하는 방법과 같습니다. Post Order Traversal은 무엇이며 트리 합계를 계산하는 데 어떻게 사용할 수 있습니까? 중간 수준의 개념을 이해하면 이 질문을 쉽게 이해할 수 있지만 질문 자체는 이러한 개념을 모르는 사람들을 위한 것이 아닙니다.
우리가 요구하는 것은 모든 노드의 왼쪽 및 오른쪽 하위 트리 합계 간의 차이를 계산하는 것입니다. 이는 다음과 같이 번역됩니다.
우리가 방문하는 모든 노드에서 왼쪽 트리와 오른쪽 트리의 합을 얻습니다. 둘 사이의 차이점을 파악하십시오. 그런 다음 그 차이를 총합에 더할 수 있습니다. 전체 트리의 모든 노드에 대해 이 프로세스를 반복합니다.
권장 지식
Post Order Traversal
우리는 무엇을 알고 있습니까?
어떻게 할 것인가:
Post Order Traversal을 사용하여 각 노드의 기울기를 계산할 것입니다. 왼쪽 및 오른쪽 하위 트리의 합을 계산하여 이를 수행합니다. 왼쪽 및 오른쪽 하위 트리의 합이 주어지면 현재 노드의 기울기를 계산할 수 있습니다.
기울기는 다음과 같이 계산됩니다.
tilt = abs(left_subtree_sum - right_subtree_sum)
tilt_counter
를 선언할 것입니다. 많은 ( +=
) 작업. left_sum
및 right_sum
를 얻습니다. 왼쪽 및 오른쪽 하위 트리의 합을 나타냅니다. (말이 안 되더라도 걱정하지 마세요. 곧 설명될 것입니다.) tilt
를 계산합니다. left_sum
와 right_sum
사이의 절대 차이를 계산하여 이를 수행합니다. 그런 다음 이 값이 tilt_counter
에 추가됩니다. 빅오 표기법:
리트코드 결과:
제출 링크 참조:
해결책
var findTilt = function (root) {
/* -------------------------------------------------------------------------- */
/* 563. Binary Tree Tilt */
/* -------------------------------------------------------------------------- */
/**
* @author Samuel Hinchliffe
* @see {@link linkedin.com/in/samuel-hinchliffe-🚀-2bb5801a5/ | Author's Linkedin }
* @see {@link github.com/Samuel-Hinchliffe}
*/
// Our tilt counter (Keeps track of the diff between the left and right subtrees)
let tilt_counter = 0;
// Recursive function to traverse the tree
// In a post order fashion, get all the sums for all the subtrees
// we then figure out the difference between the left and right subtrees
// and add that to the tilt counter.
const post_order_traversal = (node) => {
// If the node does not exist.
// It has no value and therefore it's a 0.
if (!node) {
return 0;
}
// Post Order, get me their SUMS!!!
let left_sum = post_order_traversal(node.left);
let right_sum = post_order_traversal(node.right);
// Figure out the difference between the left and right subtrees
// We use the absolute value of the difference to keep track of the tilt
tilt_counter += Math.abs(left_sum - right_sum);
// Return the value of the node and it's subtrees.
return left_sum + right_sum + node.val;
};
post_order_traversal(root);
return tilt_counter;
};
Reference
이 문제에 관하여(563. 이진 트리 기울기 🚀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/samuelhinchliffe/563-binary-tree-tilt-c1o
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var findTilt = function (root) {
/* -------------------------------------------------------------------------- */
/* 563. Binary Tree Tilt */
/* -------------------------------------------------------------------------- */
/**
* @author Samuel Hinchliffe
* @see {@link linkedin.com/in/samuel-hinchliffe-🚀-2bb5801a5/ | Author's Linkedin }
* @see {@link github.com/Samuel-Hinchliffe}
*/
// Our tilt counter (Keeps track of the diff between the left and right subtrees)
let tilt_counter = 0;
// Recursive function to traverse the tree
// In a post order fashion, get all the sums for all the subtrees
// we then figure out the difference between the left and right subtrees
// and add that to the tilt counter.
const post_order_traversal = (node) => {
// If the node does not exist.
// It has no value and therefore it's a 0.
if (!node) {
return 0;
}
// Post Order, get me their SUMS!!!
let left_sum = post_order_traversal(node.left);
let right_sum = post_order_traversal(node.right);
// Figure out the difference between the left and right subtrees
// We use the absolute value of the difference to keep track of the tilt
tilt_counter += Math.abs(left_sum - right_sum);
// Return the value of the node and it's subtrees.
return left_sum + right_sum + node.val;
};
post_order_traversal(root);
return tilt_counter;
};
Reference
이 문제에 관하여(563. 이진 트리 기울기 🚀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/samuelhinchliffe/563-binary-tree-tilt-c1o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)