标签:Lowest Binary right return Python self nodes root left
初步的思路是把长度超过2的node做2分,划分到长度为1 或者2的node sublist,这样就可以拿到LCA里处理。但是这样做会在第54(/57)个TC处TLE。先把这个写法留下,之后写可以全部过的版本。
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', nodes: 'List[TreeNode]') -> 'TreeNode':
if len(nodes) == 1:return nodes[0]
if len(nodes) == 2:return self.findLCA(root, nodes[0], nodes[1])
if len(nodes) > 2:
sep = len(nodes)//2
nodelist1 = nodes[:sep]
nodelist2 = nodes[sep:]
ans1 = self.lowestCommonAncestor(root, nodelist1)
ans2 = self.lowestCommonAncestor(root, nodelist2)
return self.findLCA(root, ans1, ans2)
def findLCA(self, root, node1, node2):
if not root:return None
if root.val == node1.val or root.val == node2.val:return root
leftpath = self.findLCA(root.left, node1, node2)
rightpath = self.findLCA(root.right, node1, node2)
if leftpath and rightpath:return root
return leftpath if leftpath else rightpath
接下来是全部通过的版本,其实只要这样思考,root在nodes中,那一定是nodes, 而不在,则尝试root.left 和root.right看是否在nodes中,在就返回,不在,则继续node的left和right的left和right孙节点是否在nodes中,直到找到。
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', nodes):
if not root:return None
if root in nodes:return root
left = self.lowestCommonAncestor(root.left, nodes)
right = self.lowestCommonAncestor(root.right, nodes)
if left and right:return root
if left:return left
if right:return right
return None
标签:Lowest,Binary,right,return,Python,self,nodes,root,left 来源: https://blog.csdn.net/sinat_30403031/article/details/122732018
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。