제 경우에는 이렇게 코드를 짜봤는데 이것도 맞을까요?
class Solution(object):
def lowestCommonAncestor(self, root, p, q):
if root is None: # check whether Node is empty
return
if root is p or root is q:
return root
# root 노드가 p 또는 q가 아니면 순회하도록 재귀함수 호출
l = self.lowestCommonAncestor(root.left, p, q) # code 1
r = self.lowestCommonAncestor(root.right, p, q) # code 2
# p와 q 조건 검사를 마친 후(모든 노드를 순회하는 것은 아님)
if l and r:
return root
elif l:
return l
else:
return r먼저 LCA함수를 호출하면 root가 가리키는 노드가 있는지 체크한 다음에 계속해서 p 또는 q 노드가 맞는지 확인을 합니다. 만약 p 또는 q 노드가 아니면 재귀함수를 호출해서 자식 노드로 더 깊이 순회하도록 만듭니다. 역시 자식 노드들도 p 또는 q 노드가 맞는지 검사한 후 맞으면 l 또는 r에 그 노드를 저장합니다.
여기서 궁금한 점은, 자기 자신이 공통 조상이 될 때인데요. 이렇게 되면 더 깊이까지 탐색하지 않아도
elif l: return l 에 의해서 왼쪽만 탐색했으니까 시간복잡도가 O(logN)인가요? 아니면 다른 케이스들도 고려해서 최악의 경우 모든 노드를 탐색해야되니까 O(N)이 되는건가요?
답변 1
노션 공유 링크
0
85
2
수업 중간에 내주신 문제는 해답을 알 수 없는걸까요?
0
75
2
최신 강의와 비교
0
83
2
Min Cost Climbing stairs 질문
0
75
2
노션 공유 부탁드립니다!
1
87
2
for 문에 sort 함수 를 사용하면
1
87
2
노션 공유 부탁드립니다.
0
102
2
디스코드가 올바르지 않다고 뜹니다..!
0
106
1
그래프
0
97
2
노션 공유
1
122
2
시간복잡도 질문
2
124
3
11강 질문
1
77
2
노션 공유 부탁드립니다
0
83
2
linkedList - BrowserHistory 코드 질문
0
75
1
list1.append(list2)와 list1.append(list2[:])의 차이가 무엇인가요?
1
166
1
라이브러리 사용
1
135
2
문제 교재는 따로 없는 거 맞나요?
1
201
2
LCA 관련해서 질문이 있습니다.
1
117
2
[Unique Paths] 완전탐색 / DP (후반부)
0
107
1
dp 계단오르기최소비용질문입니다.
0
107
1
Dynamic Array 의 size 정보가 저장되는 곳
2
161
2
노션공유가 안된듯 합니다
1
162
2
[코테 적용] 👉 [3번 문제] 완전탐색 (DFS, BFS) (전반부)
1
121
1
강의자료 만들 때 사용하신 프로그램이 뭘까요?
1
202
1





