浙大数据结构 层序建立二叉链表

6-17 层序建立二叉链表 (20 分)

本题要求实现一个函数,给定一棵二叉树的层序序列,创建该树的二叉链表。

函数接口定义:

BinTree CreatBinTree(); 

函数CreatBinTree从标准输入读入一棵二叉树的层序序列,创建二叉树的二叉链表。函数应返回指向二叉链表根结点的指针。其中,二叉树结点的键值用字符表示,字符之间不含空格。空树用#表示。

其中BinTree结构定义如下:

typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
    ElementType Data;
    BinTree Left;
    BinTree Right;
};

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>

typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
    ElementType Data;
    BinTree Left;
    BinTree Right;
};

BinTree CreatBinTree(); 
void PreorderTraversal( BinTree BT );   /* 实现细节忽略 */
void InorderTraversal( BinTree BT );  /* 实现细节忽略 */
void PostorderTraversal( BinTree BT );  /* 实现细节忽略 */

int main()
{
    BinTree BT = CreatBinTree();
    printf("Preorder: ");    PreorderTraversal(BT);    printf("\n");
    printf("Inorder: ");   InorderTraversal(BT);     printf("\n");
    printf("Postorder: ");  PostorderTraversal(BT);  
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

abc###d#e##

输出样例:

Preorder: abcde
Inorder: bacde
Postorder: bedca
BinTree CreatBinTree() {
	ElementType Data;
	BinTree BT,T;
	BinTree Q[1000005];//用BinTree的类型的数组模拟队列
	int head=0,tail=1;//记录头位置
	scanf("%c",&Data);
	if(Data!='#') { //单独处理根节点
		BT=(BinTree)malloc(sizeof(struct TNode));
		BT->Data=Data;
		BT->Left=BT->Right=NULL;//先把下边的左右 节点置为NULL 
		Q[head]=BT;		//BT放入队列里
	} else return NULL; //根节点是# ,直接over
	while(head!=tail) { //队列不为空
		T=Q[head];//弹出第一个
		head++;//表示空的指针也需要动
		scanf("%c",&Data);
		if(Data=='#')
			T->Left=NULL;//
		else {
			T->Left=(BinTree)malloc(sizeof(struct TNode));
			T->Left->Data=Data;
			T->Left->Left=T->Left->Right=NULL;//先把下边的左右 节点置为NULL 
			Q[tail++]=T->Left;//T->Left入队 

		}
		scanf("%c",&Data);
		if(Data=='#')
			T->Right=NULL;
		else {
			T->Right=(BinTree)malloc(sizeof(struct TNode));
			T->Right->Data=Data;
			T->Right->Left=T->Right->Right=NULL;//先把下边的左右 节点置为NULL 
			Q[tail++]=T->Right;
		}
	}
	return BT;//因为左节点先入队,所以先处理左节点(赋值) 
}//tail在前head在后,输出head,head在追赶tail; 

猜你喜欢

转载自blog.csdn.net/red_red_red/article/details/83755580