在二叉树中找到两个节点最近公共祖先

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/难度中等)

如果不是树中的所有这些节点,Python会在二叉树中找到两个节点的最低共同祖先

leetcode刷题13

python代码实现二叉树中最低的公共祖先

二叉树进阶题------最近公共祖先