226. 이진 트리 반전 🚀
솔루션 개발:
질문
이 기사에서는 Leetcode '226. Invert Binary Tree' 질문을 다룰 것입니다. 이 질문은 쉬운 질문으로 평가됩니다.
의문:
Given the
root
of a binary tree, invert the tree, and return itsroot
.
예시:
Input: root = [4,2,7,1,3,6,9]
Output: [4,7,2,9,6,3,1]
질문 설명
이진 트리를 반전해야 합니다. 마치 거울을 나무에 대고 있는 것처럼.
이것이 의미하는 바는
node
마다 left
및 right
노드를 교환해야 한다는 것입니다. 노드가 더 이상 남지 않을 때까지 계속합니다.따라서 트리 맨 아래부터 시작하여
left
노드를 right
노드로 교환하고 그 반대의 경우도 마찬가지입니다.권장 지식
우리는 무엇을 알고 있습니까?
left
노드는 right
노드가 되고 right
노드는 left
노드가 됩니다. 어떻게 할 것인가:
Post Order Traversal을 사용하여
tree
를 반전시킬 것입니다. 즉, 트리의 왼쪽 맨 아래에서 시작하여 트리의 root
까지 다시 작업합니다.그런 다음
left
및 right
노드를 교환합니다. root
노드에 다시 도달할 때까지 트리의 모든 노드에 이 작업을 수행합니다.빅오 표기법:
' 개선될 수 있을까? ' 예! Morris Traversal은 O(1) 공간 복잡성에서 이 문제를 해결할 수 있습니다. 그러나 Morris Traversal은 읽기 까다롭고 어렵습니다. 단순화를 위해 여기서는 사용하지 않습니다.
리트코드 결과:
제출 링크 참조:
솔루션 1
var invertTree = function (root) {
/* -------------------------------------------------------------------------- */
/* 226. Invert Binary Tree */
/* -------------------------------------------------------------------------- */
// We have reached a leaf node, so we need to bubble back up the stack.
// To the next node.
if (!root) {
return root;
}
// A temporary variable to hold the left node (As we're about to override it but still need it for later).
let temp_node = root.left;
// We then swap the left and right nodes. With the help of that temporary variable.
root.left = root.right;
root.right = temp_node;
// We then do this for all the left nodes of the given tree, and then all the right nodes of a given tree.
invertTree(root.left);
invertTree(root.right);
// Assuming we have swapped our left and right nodes, we return the root node.
return root;
};
솔루션 2
var invertTree = function (root) {
// We have reached a leaf node, so we need to bubble back up the stack.
// To the next node.
if (!root) {
return root;
}
// ES6 Destructuring.
// What this does is take the left and right nodes and swap them.
// But without the need of a temp variable. As in object destructuring, it remembers.
// Although, if you're a performance fanatic, this isn't efficient.
[root.left, root.right] = [invertTree(root.right), invertTree(root.left)]
return root
};
Reference
이 문제에 관하여(226. 이진 트리 반전 🚀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/samuelhinchliffe/226-invert-binary-tree-117j
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var invertTree = function (root) {
/* -------------------------------------------------------------------------- */
/* 226. Invert Binary Tree */
/* -------------------------------------------------------------------------- */
// We have reached a leaf node, so we need to bubble back up the stack.
// To the next node.
if (!root) {
return root;
}
// A temporary variable to hold the left node (As we're about to override it but still need it for later).
let temp_node = root.left;
// We then swap the left and right nodes. With the help of that temporary variable.
root.left = root.right;
root.right = temp_node;
// We then do this for all the left nodes of the given tree, and then all the right nodes of a given tree.
invertTree(root.left);
invertTree(root.right);
// Assuming we have swapped our left and right nodes, we return the root node.
return root;
};
var invertTree = function (root) {
// We have reached a leaf node, so we need to bubble back up the stack.
// To the next node.
if (!root) {
return root;
}
// ES6 Destructuring.
// What this does is take the left and right nodes and swap them.
// But without the need of a temp variable. As in object destructuring, it remembers.
// Although, if you're a performance fanatic, this isn't efficient.
[root.left, root.right] = [invertTree(root.right), invertTree(root.left)]
return root
};
Reference
이 문제에 관하여(226. 이진 트리 반전 🚀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/samuelhinchliffe/226-invert-binary-tree-117j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)