首页 > 代码库 > Lowest Common Ancestor of a Binary Tree, with Parent Pointer

Lowest Common Ancestor of a Binary Tree, with Parent Pointer

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;}

 

Lowest Common Ancestor of a Binary Tree, with Parent Pointer