查找最近公共祖先

查找最近公共祖先

查找的前提是,结点a和结点b都在树中。

主要操作对象是二叉查找树,具体步骤如下:

  • 记当前根结点为x;
  • 如果 a < x 且 b > x (或反过来),则说明x即为要求的祖先;
  • 如果a,b都小于(大于)x,说明也要继续向左(右)子树查找;
  • 如果 x == a(b),说明a(b)就是b(a)的祖先。
/* 查找公共祖先 */
int findAncestor(node* root, int a, int b)
{
    // a,b结点在根结点左右两侧,说明该根结点就是公共祖先
    if (a < root->data && b > root->data || a > root->data && b < root->data)
        return root->data;
    
    // a(b)即是b(a)的祖先
    if (root->data == a || root->data == b)
        return root->data;
    
    // 继续向左右子树查找
    if (a < root->data && b < root->data)
        return findRoot(root->lchild, a, b);
    else if (a > root->data && b > root->data)
        return findRoot(root->rchild, a, b);
}

你可能感兴趣的:(Algorithm,-,cpp)