Binary tree 如何找到二叉树中所有节点对的LCA

Binary tree 如何找到二叉树中所有节点对的LCA,binary-tree,lowest-common-ancestor,Binary Tree,Lowest Common Ancestor,有一些算法可以找到给定节点对的LCA。但是,有没有算法可以在小于O(n^2)的渐近时间内找到二叉树中所有节点对的LCA 我特别寻找一个时间跨度为O(n logn)的算法,您需要递归地思考这个问题。考虑树的根r。r的直接左子树和所有属于根在r的直接右子树的子树的节点的LCA。对r的右近子级和属于树的所有节点(根在r的左近子级)执行类似操作 那么,让我们定义一个名为LCA的函数,如下所示(在伪代码中): LCA(r) if r does not have both a right and l

有一些算法可以找到给定节点对的LCA。但是,有没有算法可以在小于O(n^2)的渐近时间内找到二叉树中所有节点对的LCA


我特别寻找一个时间跨度为O(n logn)

的算法,您需要递归地思考这个问题。考虑树的根r。r的直接左子树和所有属于根在r的直接右子树的子树的节点的LCA。对r的右近子级和属于树的所有节点(根在r的左近子级)执行类似操作

那么,让我们定义一个名为LCA的函数,如下所示(在伪代码中):

LCA(r)
    if r does not have both a right and left child
        return empty list.
    else
        p1 = pairs made up of left child and all the nodes rooted at right child.
        p2 = pairs made up of right child and all the nodes rooted at the left child.
        p3 = LCA(left child of r)
        p4 = LCA(right child of r)
        return p1 + p2 + p3 + p4