Letcode 퀴즈: 검지 오피스 [면접문제 27 두 갈래 나무의 거울]
6970 단어 오늘 학교에 가세요?
문서 목록
난이도:간단
함수를 완성하고 두 갈래 나무를 입력하십시오. 이 함수는 거울을 출력합니다.
Letcode 문제 대응 위치: 면접 문제 27: 두 갈래 나무의 거울
사고방식 1: 귀속
일반적인 사고방식은 바로 역귀해법이다.(1) 귀속 경계 결정: 루트 = null;(2) 각 루트에 대한 작업: 교환 루트.left 및 root.right;(3) 좌우 나무 뿌리 노드를 차례로 아래로 교환하면 된다.
시간 복잡도: O(n), n은 두 갈래 나무 노드 수량 공간 복잡도: O(n), 최악의 경우 두 갈래 나무가 체인 테이블로 퇴화하려면 O(n) 크기의 호출 창고 공간이 필요합니다.# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root: return
tmp = root.left
root.left = root.right
root.right = tmp
self.mirrorTree(root.left)
self.mirrorTree(root.right)
return root
사고방식2: 비귀속
교체 방법 1: 창고에서 두 갈래 나무의 순서를 시뮬레이션하고 창고 꼭대기 노드의 좌우 서브 나무를 교환합니다.교체의 종료 조건은 창고가 비어 있습니다.
시간 복잡도: O(n), n은 두 갈래 나무 노드 수량 공간 복잡도: O(n), 최악의 경우 두 갈래 나무, 총 n개 노드, 창고에 최대 n/2개 노드 동시 저장class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root: return
stack = [root]
while stack:
node = stack.pop()
if node.left: stack.append(node.left)
if node.right: stack.append(node.right)
node.left, node.right = node.right, node.left
return root
교체 방법 2: 대기열을 사용하여 두 갈래 나무의 차원을 모의하고 교환대 첫 번째 노드의 좌우 서브 나무를 실현한다.교체의 끝 조건은 대기열이 비어 있습니다.class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root: return
queue = [root]
while queue:
node = queue.pop(0)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
node.left, node.right = node.right, node.left
return root
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root: return
tmp = root.left
root.left = root.right
root.right = tmp
self.mirrorTree(root.left)
self.mirrorTree(root.right)
return root
교체 방법 1: 창고에서 두 갈래 나무의 순서를 시뮬레이션하고 창고 꼭대기 노드의 좌우 서브 나무를 교환합니다.교체의 종료 조건은 창고가 비어 있습니다.
시간 복잡도: O(n), n은 두 갈래 나무 노드 수량 공간 복잡도: O(n), 최악의 경우 두 갈래 나무, 총 n개 노드, 창고에 최대 n/2개 노드 동시 저장
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root: return
stack = [root]
while stack:
node = stack.pop()
if node.left: stack.append(node.left)
if node.right: stack.append(node.right)
node.left, node.right = node.right, node.left
return root
교체 방법 2: 대기열을 사용하여 두 갈래 나무의 차원을 모의하고 교환대 첫 번째 노드의 좌우 서브 나무를 실현한다.교체의 끝 조건은 대기열이 비어 있습니다.
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root: return
queue = [root]
while queue:
node = queue.pop(0)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
node.left, node.right = node.right, node.left
return root