【问题标题】:Algorithm to find common ancestor of two nodes given给定两个节点的共同祖先的算法
【发布时间】:2015-01-23 02:30:37
【问题描述】:

如果给我两个节点和树的根。如何找到两个节点的共同祖先?

【问题讨论】:

标签: data-structures tree


【解决方案1】:

您可以采用这种方法

在从上到下遍历二叉搜索树时,我们遇到的第一个节点 n 的值介于 n1 和 n2 之间,即 n1

这是面试中常见的编程问题,您可以在interview sites上轻松找到它的解决方案

【讨论】:

    【解决方案2】:

    您好,这是一个我发现对 LCA 有用的 python 实现:-

    class BST(object):
    def __init__(self, val=None, right=None, left=None):
        self.val = val
        self.right = right
        self.left = left
        return None
    
    def __nonzero__(self):
        return self.val is not None
    
    def insert(self, item):
        if not self:
            self.val = item
        elif item < self.val:
            if self.left:
                return self.left.insert(item)
            else:
                self.left = BST(val=item)
        elif item > self.val:
            if self.right:
                return self.right.insert(item)
            else:
                self.right = BST(val=item)
        return None
    
    def lca(self, m, n):
        if n < self.val:
            return self.left.lca(m, n)
        elif m > self.val:
            return self.right.lca(m, n)
        else:
            return self.val
    
    
    if __name__ == "__main__":
    b = BST()
    for k in [8, 3, 10, 1, 6, 14, 4, 7, 13]:
        b.insert(k)
    for pair in [(4, 7), (4, 10), (1, 4), (1, 3), (3, 6)]:
        print b.lca(*pair)
    

    【讨论】:

      猜你喜欢
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多