分层打印二叉树


分层打印出二叉树的节点,在本文中的解题思路是,把二叉树的节点放到一个对应的数组中,然后打印出数组。在这里重要的是怎样把二叉树的节点数值放到对应的数组中。 

                                                    图 1满二叉树

上图是满二叉树的图形,可以看到不同的借点所对应的位置。我们要做的就是把节点放到数组中。比如,把“i”节点中的数值放到对应的数组“i“的位置。如果二叉树不是一个满二叉树,我们可以在上面补零,找出在满二叉树是他们所对应的位置。下面就是代码。

typedef struct BiTNode{
	int data;

	struct BiTNode *lchild,*rchild;
}*BiTree;
struct SqList
{
	int elem[200];//将二叉树的节点数值存放到这个数组中,暂时定义数组长度为200
	int length;
};


 

BiTNode *CreatTree(BiTNode *T) //利用递归方法创建二叉树
{

	int ch;
	scanf("%d",&ch);

	if (ch==0)
	{

		return NULL;
	}
	else
	{

		T=(BiTNode*)malloc(sizeof(BiTNode));
		if (T==NULL)
		{
			printf("内存不足");
		}
	
		T->data=ch;
		T->lchild=CreatTree(T->lchild);
		T->rchild=CreatTree(T->rchild);

	}

	return T;

}

下面是将二叉树的节点存放到数组中的函数,同样利用递归方法。


 

void  Store(BiTNode *T,SqList *L,int k)
{
	if (T==NULL)
	{
		L->elem[k]=' ';

	}
	else
	{
		L->elem[k]=T->data;
		Store(T->lchild,L,2*k);
		Store(T->rchild,L,2*k+1);

	}
}


下面是测试函数

int main()
{

	BiTNode *T=NULL;

	T=(BiTree)malloc(sizeof(BiTNode));
	T=CreatTree(T);

	SqList *L=(SqList*)malloc(sizeof(SqList));

	memset(L->elem,0,200*sizeof(int)); //初始化数组为0
	Store(T,L,1);
	for(int i=0;i<200;i++)
	{

			printf("%d ",L->elem[i]);

	
	}

如果创建如下图的二叉树

                                       图2

则输出结果是

                                                             图 3

大家可以把上面的二叉树补充为满二叉树,对照他们在数组中的位置观察

 


 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值