EricYang

Tech Spot of Eric

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

只要找到这样一个节点:

已知的两个节点一个在它的左边子树,一个在它的右边子树;

或者这个节点就是已知的两个节点中的一个,而另一个恰好在它的下面。

 

TREE* CommonFather(TREE *root, TREE *A, TREE *B)
{
    if(root == NULL)
        return root;
    if(root == A)//如果找到A,则后面的都不再找了,如果其他分支没找到B,则B必定在A下面
        return A;
    if(root == B)//同上
        return B;
    TREE *leftChild == NULL;
    TREE *rightChild == NULL;
    leftChild = CommonFather(root->left, A, B);//返回A,B或结果
    rightChild = CommonFather(root->right, A, B);//返回A,B或结果
    if(leftChild != NULL && rightChild != NULL)//如果都不为空,则必定一个是A,一个是B;
        return root;
    if(leftChild != NULL)//如果不为空,则必定是A或B或结果;
        return leftChild;
    if(rightChild != NULL)
        return rightChild;//如果不为空,则必定是A或B或结果;
}

  

posted on 2012-05-04 17:27  Eric-Yang  阅读(579)  评论(0)    收藏  举报