int BTNodeDepth(BTNode *b)
{
int lchilddep,rchilddep;
if(b==NULL)
return 0;
else
{
lchilddep=BTNodeDepth(b->lchild);
rchilddep=BTNodeDepth(b->rchild);
return (lchilddep>rchilddep) ? (lchilddep+1):(rchilddep+1);
}
}
void findMaxDistance(BTNode *b,char x)//找指定结点的最大距离
{
BTNode *p,*tmp;
stack<BTNode*> s;
int flag,i,gmax(0),localmax;
do
{
while(b!=NULL)
{
if(b->data==x){//找到结点
tmp=b;
i=1;//与上个祖先的距离
while(!s.empty()){
p=s.top();
s.pop();
if(p->lchild==tmp)
localmax=BTNodeDepth(p->rchild)+i;
else
localmax=BTNodeDepth(p->lchild)+i;
if(gmax<localmax)
gmax=localmax;
tmp=p;
i++;
}
cout<<"max_depth:"<<gmax<<endl;
return;
}
s.push(b);
b=b->lchild;
}
p=NULL;
flag=1;
while(!s.empty() && flag)
{
b=s.top();
if( b->rchild==p)
{
s.pop();
p=b;
}
else
{
b=b->rchild;
flag=0;//flag==0表明了,要入栈的分支
}
}
}while(!s.empty());
}
findMaxDistance
最新推荐文章于 2024-05-29 08:19:08 发布