代码改变世界

Lowest Common Ancestor of a Binary Tree, with Parent Pointer

2014-12-16 23:51  李涛的技术博客  阅读(227)  评论(0编辑  收藏  举报

Given a binary tree, find the lowest common ancestor of two given nodes in tree. Each node contains a parent pointer which links to its parent.

 

int getHeight(Node* p)
{
    int height = 0;
    while (p)
    {
        height++;
        p = p->parent;
    }
    return height;
}

Node* LCA(Node* p, Node *q)
{
    int h1 = getHeight(p);
    int h2 = getHeight(q);
    if (h1 > h2)
    {
        swap(h1, h2);
        swap(p, q);
    }
    for (int h = 0; h < h2-h1; h++)
    {
        q = q->parent;
    }
    while (p && q)
    {
        if (p == q)
            return p;
        p = p->parent;
        q = q->parent;
    }
    return NULL;
}