vlambda博客
学习文章列表

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

给定一棵二叉树以及这棵树上的两个节点 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


欢迎关注哦!!!


扫描二维码获取
更多精彩

二斌养鸡场