6-9 二叉树的遍历 (25分)

文章目录

  • 问题
  • 解决方法

问题

本题要求给定二叉树的4种遍历。
函数接口定义:

void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );

其中BinTree结构定义如下:

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

要求4个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符。
裁判测试程序样例:

#include
#include

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

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

int main()
{
BinTree BT = CreatBinTree();
printf(“Inorder:”); InorderTraversal(BT); printf("\n");
printf(“Preorder:”); PreorderTraversal(BT); printf("\n");
printf(“Postorder:”); PostorderTraversal(BT); printf("\n");
printf(“Levelorder:”); LevelorderTraversal(BT); printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):

Inorder: D B E F A G H C I
Preorder: A B D F E C G H I
Postorder: D E F B H G I C A
Levelorder: A B C D F G I E H

解决方法

函数题,实现树的四种遍历。前三种遍历:先序,后序,中序遍历直接用递归实现。主要需要注意的是层序遍历,利用队列实现。先进后出,在队尾插入,队头输出。

void InorderTraversal(BinTree BT)
{
     
	if (BT)
	{
     
		InorderTraversal(BT->Left);
		printf(" %c", BT->Data);
		InorderTraversal(BT->Right);
	}
}
void PreorderTraversal(BinTree BT)
{
     
	if (BT)
	{
     
		printf(" %c", BT->Data);
		PreorderTraversal(BT->Left);
		PreorderTraversal(BT->Right);
	}
}
void PostorderTraversal(BinTree BT)
{
     
	if (BT)
	{
     
		PostorderTraversal(BT->Left);
		PostorderTraversal(BT->Right);
		printf(" %c", BT->Data);
	}
}
void LevelorderTraversal(BinTree BT) 
{
     
	BinTree q[100],p;
	int front=0, rear=0;
	if (!BT) return;
	else
	{
     
		q[rear++] = BT;
		while (front != rear)
		{
     
			p = q[front++];
			printf(" %c", p->Data);
			if (p->Left)	q[rear++] = p->Left;
			if (p->Right)	q[rear++] = p->Right;	
		}
	}
}

你可能感兴趣的:(6-9 二叉树的遍历 (25分))