二叉树的输出:以凹入表示法输出家谱

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

最近在学习二叉树,用二叉树输出家谱,浏览了一些网页,发现有的代码和实验指导书上的代码都错在一个地方,造成输出错误。如下:
在这里插入图片描述
小小修改了下,增加了个判断条件,成功输出

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;			//为左子树节点
			}
        }
	}
}

输出如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值