为了账号安全,请及时绑定邮箱和手机立即绑定

以下问题是关于binarytreenode的一个问题,麻烦大佬帮忙看看~

以下问题是关于binarytreenode的一个问题,麻烦大佬帮忙看看~

慕婉清6462132 2022-01-21 15:11:09
题目:给定节点类型为binarytreenode的三个指针p,q,rt,设rt为根节点,求距离p,q最近的这两个节点的共同祖先节点。我的想法是先找到p 的所有祖先节点,存入栈中;同理找出q的,然后比较两个栈中的节点,如果弹出的有不相等的,那么前一个就是所要求的。不知道代码如何写,大家帮帮忙!看来没有人愿意帮忙啊!
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

struct
{ BiTree t;
int tag;//tag=0 表示结点的左子女已被访问,tag=1表示结点的右子女已被访问
}stack;

stack s[],s1[];

BiTree Ancestor(BiTree root,p,q)
{top=0; bt=root;
while(bt!=null ||top>0){
while(bt!=null && bt!=p && bt!=q){
s[++top].t=bt;
s[top].tag=0;
bt=bt->lchild;
} //沿左分枝向下

if(bt==p){
for(i=1;i<=top;i++)
s1[i]=s[i];
top1=top;
}//将栈s的元素转入辅助栈s1 保存

if(bt==q) //找到q 结点。
for(i=top;i>0;i--){
pp=s[i].t;
for (j=top1;j>0;j--)
if(s1[j].t==pp) {printf(“p 和q的最近共同的祖先已找到”);return (pp);}


while(top!=0 && s[top].tag==1) top--; //退栈

if (top!=0){s[top].tag=1;bt=s[top].t->rchild;} //沿右分枝向下遍历

}//结束while(bt!=null ||top>0)

return(null);//q、p无公共祖先

}//结束Ancestor



查看完整回答
反对 回复 2022-01-23
  • 1 回答
  • 0 关注
  • 225 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信