您的位置:首页 > 其它

找出二叉树中两个节点的最低共同父节点

2012-07-20 10:31 169 查看
算法设计:后续遍历此二叉树,将两个节点的父节点分别放入两个链表中,然后顺序对比,找出最后一个相同的节点,既是最低共同节点

C伪码实现:

List *h,*h1,*h2;

bool find1=false,find2=false;

void postVisit(BTNode *root)
{
if(root!=null)
{
add(root,h);                         //将root结点加入以h为表头的链表中

postVisit(root->lchild);
if(root->lchild!=NULL)
delete(root->lchild,h);         //从h链表中删除root右孩子结点

postVisit(root->lchild);
if(root->rchild!=NULL)
delete(root->rchild,h);         //从h链表中删除root左孩子结点

if(root->value == v1)
{
copy(h,h1);                    //找到第一个所需结点 将h链表中的所有节点copy到h1中
find1=true;
}
else((root->value == v1))
{
copy(h,h2);                    //找到第二个所需结点 将h链表中的所有节点copy到h2中
find2=true;
}
if(find1 && find2)                   //两个链表形成,退出后序遍历
return;
}
}

void findParentNode(BTNode *root)
{
postVisit(root);

for(List *p1=h1,*p2=h2;p1->next->node!=p2->next->node && p1!=NULL && p2!=NULL;p1=p1->next,p2=p2->next);

if(p1->node!=p2->node)                 //此时没有公共结点,可能没有找到目标结点
printf("not same parent");
else
printf(p1->node);                //输出最低公共结点

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