이진트리 반전 과제톡 발표 자료

tk_jang·2022년 5월 23일
0

알고리즘

목록 보기
6/7

1. 트리 자료구조란?

2. 이진 트리란?

이진트리는 컴퓨터 응용에서 가장 많이 활용되는 아주 중요한 트리구조이다. 이 이진 트리는 모든 노드가 정확하게 두 개의 서브트리를 가지고 있는 트리이다. 다만 서브트리는 공백이 될 수 있다. 즉 노드의 유한 집합으로서 공백이거나 루트와 두 개의 분리된 이진트리인 경우 왼쪽서브트리와 오른쪽 서브트리로 구성된다. 여기서 중요한점은 왼쪽과 오른쪽 서브트리를 확실하게 구분한다는 것이다.
출처: https://kingpodo.tistory.com/27 [킹포도의 코딩]

3. 트리노드의 구현

class TreeNode:
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

4. 트리를 생성 하는 함수

def make_tree_by(lst, idx):
    parent = None
    if idx < len(lst):
        value = lst[idx]
        if value == None:
            return
        parent = TreeNode(value)
        parent.left = make_tree_by(lst, 2 * idx + 1)
        parent.right = make_tree_by(lst, 2 * idx + 2)
    return parent

5.문제

이진트리를 반전 시켜라!

6.풀이

class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        deq = deque([root])
        while deq:
            cur = deq.popleft()
            if cur:
                fir = cur.left
                sec = cur.right
                cur.left = sec
                cur.right = fir
                deq.append(cur.left)
                deq.append(cur.right)
        return root

먼저 인자로 받은 트리구조를 큐 로 받아 온다음
첫번째 노드를 가져와서 해당 노드의 left 와 right 를 바꿔줍니다 .
그럼 현재 트리의 구조는 아래 구조 처럼 바뀐다.

지금 위치까지 왔으면 이제 마지막 각 리프의 순서를 바꿔줘야한다 .
현재 left 7과 right 2를 각각 deq 에 넣어준다
그다음 먼저 들어간 7의 노드에 접근 해서
left 6 과 right 9 의 위치를 변경 해주고
또 deq 에 넣어준다음 그다음 노드인 2에 접근 해서 left 1과 right 3을 바꿔준다.
그 다음 또 지금은 리프이지만 각 리프에 더 접근할수있는 숫자가 있는지 파악 하기 위해 위 설명과 같은 방식으로 자식 노드에 하나하나 다 접근을 해본다 지금 현재로서는 9631 이 마지막노드인 리프이기 때문에 여기서 탐색을 마친다.

0개의 댓글