您的位置:首页 > 其它

判断二叉树中两个节点的最低共同父节点

2012-05-04 17:27 239 查看
只要找到这样一个节点:

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

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

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或结果;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: