TNode* Parent_Common(TNode* root,char p,char q)
{
Stack S1;
Stack S2;
InitStack(S1);
InitStack(S2);
TNode* b1=root;
TNode* b2=root;//不可以用同一个b,因为第一个while循环里b会改变。
TNode* r=NULL;
while(!StackEmpty(S1)||b1!=NULL)
{
if(b1!=NULL)
{
Push(S1,b1);
b1=b1->lchild;
}
else
{
GetTop(S1,b1);
if(b1->data==p)
break;
if(b1->rchild!=NULL&&b1->rchild!=r)
b1=b1->rchild;
else
{
Pop(S1,b1);
r=b1;//标记右孩子已经访问过了
b1=NULL;//访问完一个结点之后需要置空,不置空的话又会把这个结点压进去
}
}
}
while(!StackEmpty(S2)||b2!=NULL)
{
if(b2!=NULL)
{
Push(S2,b2);
b2=b2->lchild;
}
else
{
GetTop(S2,b2);
王道课后习题4.3.13:查找p和q的最近公共祖先结点r
最新推荐文章于 2022-12-04 09:36:41 发布