只要找到这样一个节点:
已知的两个节点一个在它的左边子树,一个在它的右边子树;
或者这个节点就是已知的两个节点中的一个,而另一个恰好在它的下面。
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或结果;
}