在二叉树中找到两个节点最近公共祖先
Posted 二斌养鸡场
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在二叉树中找到两个节点最近公共祖先相关的知识,希望对你有一定的参考价值。
给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
输入:[3,5,1,6,2,#,8,#,#,7,4],2,8
返回值:3
分析:二叉树的常规解法是递归,这次我们不用递归来做。采用备忘录的模型,我们可以依次记录每个节点对应的父节点是谁,比如memo[6]=5,这表明6的父节点是5,使用递归的方式依次完成记录。然后根据记录的结果进行求解。具体代码如下:
def commonAncestor(root,p,q):
memo={}
def dfs(root): #使用递归算法,完成备忘录记录
memo[root.left] = root
memo[root.right] = root
dfs(root.left)
dfs(root.right)
dfs(root)
l1,l2 = p,q
while l1 != l2:
l1 = memo.get(l1) if memo.get(l1) is not None else q
l1 = memo.get(l2) if memo.get(l2) is not None else p
return l1
欢迎关注哦!!!
二斌养鸡场
以上是关于在二叉树中找到两个节点最近公共祖先的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# 面试必刷TOP101:在二叉树中找到两个节点的最近公共祖先
在二叉树中找到两个节点的最近公共祖先(NC102/考察次数Top25/难度中等)