簡體   English   中英

給定兩個節點的共同祖先的算法

[英]Algorithm to find common ancestor of two nodes given

如果給我兩個節點和樹的根。 如何找到兩個節點的共同祖先?

您可以按照這種方式

從上到下遍歷二叉搜索樹時,我們遇到的第一個節點n的值在n1和n2之間,即n1 <n <n2是n1和n2的最低或最小公祖(LCA)(其中n1 <n2) 。 因此,只需先遍歷BST,如果找到一個值在n1和n2之間的節點,則n是LCA,如果它的值大於n1和n2,則我們的LCA位於該節點的左側,如果如果它的值小於n1和n2,則LCA位於右側。

它是面試中常見的編程問題,您可以在面試站點上輕松找到其解決方案

嗨,這是我發現對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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM