이직하고만다(분노)

99클럽 코테 스터디 14일차 TIL + 리트코드 이분탐색

xxo_ohii 2024. 8. 4. 19:03
728x90

 

- 오늘의 학습 키워드 : 이분탐색

- 리트코드 링크 : https://leetcode.com/problems/symmetric-tree/
- 공부한 내용 본인의 언어로 정리하기

 

#이분탐색
#루트 왼쪽
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True
        def checkNodeTree(left,right):
            if not left and not right: #왼쪽 오른쪽 모두 노드가 없을때
                return True
            if not left or not right: #왼쪽 오른쪽 중 하나라도 노드가 없을때
                return False
            if left.val != right.val:
                return False
            return checkNodeTree(left.left, right.right) and checkNodeTree(left.right,right.left)
        return checkNodeTree(root.left,root.right)


- 오늘의 회고
  : 오늘은 루트 노드를 기준으로 왼쪽이랑 오른쪽이 대칭이 되는지 아닌지 확인하는 문제.

오늘도 초기 코드를 참고해서 코드를 짰는데 어제보다는 훨 훨 어려움 ;; 

어제는 문제 이해가 어려웠는데 오늘은 걍 문제가 어려븜 이거 절대 이지아님 ㅜㅜ 암튼 아님



class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True

 

우선 is..함수의 시작은 

루트가 존재하지 않으면 (그럴일은 없겠지만) 0이니까 true를 리턴한다.

 

       def checkNodeTree(left,right):
            if not left and not right: #왼쪽 오른쪽 모두 노드가 없을때
                return True

 

그리고 밑에 노드트리가 양쪽 대칭되는지 확인하려고 check...함수를 써서

만약 왼쪽과 오른쪽 노드가 둘다 존재하지 않는다면

그것도 역시 그럴리는 없겠지만 True

 

            if not left or not right: #왼쪽 오른쪽 중 하나라도 노드가 없을때
                return False
            if left.val != right.val:
                return False

 

만약 왼쪽이나 오른쪽 중 하나라도 노드가 없다면

그 역시 대칭이 아님으로 False

 

만약 왼쪽의 값이랑 오른쪽의 값이랑 같지않으면 초기에는 루트밑에 두 노드만 비교하는거니까

FALSE

 

            return checkNodeTree(left.left, right.right) and checkNodeTree(left.right,right.left)
        return checkNodeTree(root.left,root.right)

 

그리고 루트의 왼쪽의 왼쪽이랑 루트의 오른쪽이랑 오른쪽을 재귀함수로 호출해서 값 가져오고
루트의 왼쪽의 오른쪽이랑 오른쪽의 왼쪽이랑 호출해서 값가져와서 논리값을 비교해서 return한다음

그리고 전체의 대칭정을 확인하기위해 리턴한다.

 

728x90