이진 트리의 가장 낮은 공통 조상
definition of LCA on Wikipedia에 따르면: "가장 낮은 공통 조상은 두 노드
p
와 q
사이에서 T
와 p
를 모두 포함하는 q
의 가장 낮은 노드로 정의됩니다(여기서 노드를 허용합니다. 자신의 후손이 되는 것)."예 1:
입력: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
출력: 3
설명: 노드 5와 1의 LCA는 3입니다.
예 2:
입력: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
출력: 5
설명: 노드 5와 4의 LCA는 5입니다. 노드는 LCA 정의에 따라 자신의 자손이 될 수 있기 때문입니다.
예 3:
입력: 루트 = [1,2], p = 1, q = 2
출력: 1
제약:
[2, 105]
범위에 있습니다. -109 <= Node.val <= 109
Node.val
은 고유합니다. p != q
p
및 q
가 트리에 존재합니다. 해결책:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# class Solution:
# def isInTree(self, root, node):
# if root:
# if root.val == node.val:
# return True
# if self.isInTree(root.left, node) or self.isInTree(root.right, node):
# return True
# return False
# def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
# if root:
# if root.val == p.val or root.val == q.val:
# return root
# pInLeft = self.isInTree(root.left, p)
# qInLeft = self.isInTree(root.left, q)
# if pInLeft and qInLeft:
# return self.lowestCommonAncestor(root.left, p, q)
# if not pInLeft and not qInLeft:
# return self.lowestCommonAncestor(root.right, p, q)
# if pInLeft ^ qInLeft:
# return root
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
nodepaths = [None, None]
paths = [[root]]
while len(paths) > 0:
curr = paths.pop()
if curr[-1].val == p.val:
nodepaths[0] = curr
if curr[-1].val == q.val:
nodepaths[1] = curr
if nodepaths[0] and nodepaths[1]:
break
if curr[-1].left:
paths.append(curr + [curr[-1].left])
if curr[-1].right:
paths.append(curr + [curr[-1].right])
i = 0
k = min(len(nodepaths[0]), len(nodepaths[1]))
while nodepaths[0][i].val == nodepaths[1][i].val:
i += 1
if i >= k:
break
return nodepaths[0][i - 1]
Reference
이 문제에 관하여(이진 트리의 가장 낮은 공통 조상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/lowest-common-ancestor-of-a-binary-tree-3mn8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)