트리 문제 질문입니다!
340
작성한 질문수 17
def LCA(root, p, q):
if root == None:
return None
left = LCA(root.left, p, q)
right = LCA(root.right, p, q)
if root == p or root == 1:
return root
elif left and right:
return root
return left or righthttps://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/description/
이 문제 질문드립니다.
맨 밑에 코드가 이해가 안가서 질문드려요
root가 q 이거나 p 이면 root를 반환하는 것 까지 이해했습니다.
elif left and right:
return root
return left or right저 부분이 잘 이해가 안됩니다
elif left and right 의 의미가 left 랑 right 둘다 존재하면 root를 반환하라는 의미인가요?
그게 아니면 left 아니면 right 중 둘 중 하나 존재하는 것을 리턴하라는 의미구요
저는 자바로 하고있는데 저부분이 이해가 안가서 질문드립니다..!
답변 1
1
안녕하세요 민지님!!
일단 코드에 약간 오류가..!
if root == p or root == q:
이거 맞죠?? q대신 1이 적혀있어서 ㅎㅎ
질문에 대한 답을 드리자면
left와 right에 어떤 값이 있는지는 총 4가지 경우의 수가 존재합니다.
left == None // right == None
left == 값존재 // right == None
left == None // right == 값존재
left == 값존재 // right == 값존재
elif left and right 의 의미는 left와 right값이 모두 값이 존재할 때 root를 반환한다 라는 뜻이에요.
즉 4번 째 경우의 수일 때 root를 반환하는거죠.
left와 right의 값이 둘다 존재한다는 뜻은 뭘까요?? 현재 노드가 "최소 조상 노드 LCA" 라는 뜻입니다.
그렇기 때문에 값이 둘 다 존재할 때 root를 반환하는거죠! 내가 최소조상 노드야!!! 하면서 나 자신을 반환하는 겁니다. (여기서 root는 전체 트리의 root가 아니라, cur_node를 가리키는겁니다)
그렇다면 elif left and right를 만족하지 못하고 건너뛰면 어떤 경우의 수가 남냐
left == None // right == None
left == 값존재 // right == None
left == None // right == 값존재
이렇게 세 가지 경우의 수가 남겠죠.
첫 번째 상황부터 볼까요
left == None // right == None 일때는 그냥 None을 반환해주면 돼요
left == 값존재 // right == None
left == None // right == 값존재
이 상황에서는 값이 존재하는 쪽의 값만 전달해주면 됩니다.
그걸 조건문 여러개를 써서 구현할 수 있지만,
return left or right로 구현하게되면
left == None // right == None
left == 값존재 // right == None
left == None // right == 값존재
이 세 가지 경우의 수를 그냥 한줄에 구현할 수 있게 돼요
사실 이건 파이썬이나 JS에서만 쓰이는 형태일 수 있는데요,
이해를 도와드리기위해 제가 예시 사진을 가져와봤습니다.

혹시 보시고 이해안가시는게 있으면 언제든 질문 주세요 :)
노션 공유 링크
0
90
2
수업 중간에 내주신 문제는 해답을 알 수 없는걸까요?
0
79
2
최신 강의와 비교
0
86
2
Min Cost Climbing stairs 질문
0
77
2
노션 공유 부탁드립니다!
1
88
2
for 문에 sort 함수 를 사용하면
1
90
2
노션 공유 부탁드립니다.
0
105
2
디스코드가 올바르지 않다고 뜹니다..!
0
107
1
그래프
0
98
2
노션 공유
1
123
2
시간복잡도 질문
2
125
3
11강 질문
1
78
2
노션 공유 부탁드립니다
0
84
2
linkedList - BrowserHistory 코드 질문
0
76
1
list1.append(list2)와 list1.append(list2[:])의 차이가 무엇인가요?
1
168
1
라이브러리 사용
1
137
2
문제 교재는 따로 없는 거 맞나요?
1
202
2
LCA 관련해서 질문이 있습니다.
1
118
2
[Unique Paths] 완전탐색 / DP (후반부)
0
108
1
dp 계단오르기최소비용질문입니다.
0
109
1
Dynamic Array 의 size 정보가 저장되는 곳
2
161
2
노션공유가 안된듯 합니다
1
165
2
[코테 적용] 👉 [3번 문제] 완전탐색 (DFS, BFS) (전반부)
1
122
1
강의자료 만들 때 사용하신 프로그램이 뭘까요?
1
204
1





