最近在学习二叉树,用二叉树输出家谱,浏览了一些网页,发现有的代码和实验指导书上的代码都错在一个地方,造成输出错误。如下:

小小修改了下,增加了个判断条件,成功输出
void DispTree(BTree bt)
{
BTree S[MaxSize], p;
int Level[MaxSize][2],top,i,n,width=4;
if (bt!=NULL)
{
cout<<" 家谱凹入表示法 "<<endl;
top=1;
S[top]=bt; //根节点 进栈
Level[top][0]=width;
while (top>0)
{
p=S[top];
n=Level[top][0];
for (i=1;i<=n;i++)
cout<<" ";
cout<<p->name;
if (Level[top][1]==1)
cout<<"(l)";
else
cout<<"(r)";
for (i=n+1;i<=MaxSize-6;i+=2)
cout<<"--";
cout<<endl;
top--;
if (p->rchild!=NULL)
{
top++;
S[top]=p->rchild;
if(Level[top][1]==2)//增加判断条件,如果该节点是右子树且它的右子树也存在,
{ //说明改节点的右子树为其兄弟,其显示场宽增不用再增加width
Level[top][0]=n;
}
else {Level[top][0]=n+width;} //显示场宽增width
Level[top][1]=2; //为右子树节点
}
if (p->lchild!=NULL)
{
top++;
S[top]=p->lchild;
Level[top][0]=n+width; //显示场宽增width
Level[top][1]=1; //为左子树节点
}
}
}
}
输出如下:

本文介绍了在学习二叉树时遇到的问题,即使用二叉树来表示家谱的输出代码存在错误。作者发现了这个问题,并通过增加一个判断条件成功修正了代码,使得家谱能正确地以凹入表示法显示。
730

被折叠的 条评论
为什么被折叠?



