반응형
1. 문제
- 이진 트리가 주어질 때, 각 자식 노드들을 좌우반전 시켜서 root node를 반환하라.
- 완전 이진 트리가 아님에 주의, 자식 노드가 1개인 경우도 고려해야 한다.
2. 해결
/**
* Definition for a binary tree node.
* class TreeNode {
* val: number
* left: TreeNode | null
* right: TreeNode | null
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
* }
*/
type Node = TreeNode | null;
function invertTree(root: Node): Node {
if(!root) return null; // 1. 노드가 없으면 null 반환.
if(!root.left && !root.right) return root; // 2. 자식 노드가 없으면 바로 반환.
// 5. 왼쪽, 오른쪽 자식노드 교환.
const temp : Node = invertTree(root.left); // 3. 왼쪽 자식 노드 탐색.
root.left = invertTree(root.right); // 4.오른쪽 자식 노드 탐색.
root.right = temp;
return root;
};
- 재귀 함수를 이용한 DFS 구현 (몸이 기억하는 구현;; 까먹었었는데).
- 처음에는 자식 노드가 1개만 존재하는 경우를 고려하지 않아서 Fail 났었다. 주의 필요.