6-6 二叉树的层次遍历 (附完整代码)(6 分)

本题要求实现给定的二叉树的层次遍历。

函数接口定义:

void Levelorder(BiTree T);`

T是二叉树树根指针,Levelorder函数输出给定二叉树的层次遍历序列,格式为一个空格跟着一个字符。
其中BinTree结构定义如下:

typedef char ElemType;
typedef struct BiTNode
{ ElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, BiTree;
BiTree Create();/
细节在此不表 /
void Levelorder(BiTree T);
int main()
{
BiTree T = Create();
printf(“Levelorder:”); Levelorder(T); printf("\n");
return 0;
}
/
你的代码将被嵌在这里 */

输出样例(对于图中给出的树):

在这里插入图片描述

Levelorder: A B C D F G

代码如下:


void Levelorder(BiTree T)
{
    BiTree q[1000];
    int front=0,rear =0;
    if(T)
    {
        q[rear++]=T;//根节点。
        while(front!=rear)
        {
            BiTree now=q[front++];
            printf(" %c",now->data);
            if(now->lchild) q[rear++]=now->lchild;
            //查找该层次左右子树是否遍历完成。
            if(now->rchild) q[rear++]=now->rchild;
        }

    }
}

完整代码

测试数据
输入:AB#DF##G##C##
输出:ABDFGC
上面有图
#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;
typedef struct BiTNode
{
	ElemType data;
	struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

BiTree Create();/* 细节在此不表 */

void Levelorder(BiTree T);

int main()
{
	BiTree T = Create();
	printf("Levelorder:"); Levelorder(T); printf("\n");
	return 0;
}
BiTree Create()
{
	char ch;
	scanf("%c", &ch);
	if (ch == '#')return NULL;
	BiTree T = (BiTree)malloc(sizeof(struct BiTNode));//struct可不写。
		T->data = ch;
	T->lchild = Create();
	T->rchild = Create();
	return T;
}
void Levelorder(BiTree T)
{
	BiTree q[10050];
	int front = 0, rear = 0;
	if (T)//树非空
	{
		q[rear++] = T;
		while (rear != front)
		{
			BiTree now = q[front]; front++;
			//数组中存放的是节点地址,用now接收,与链表相似
			printf(" %c", now->data);
			if (now->lchild)q[rear++] = now->lchild;//只能用now
			if (now->rchild)q[rear++] = now->rchild;
			//递归左右子树,将下层中节点放入数组
		}
	}
}
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

录大大i

如果文章有用,还请鼓励一下作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值