求助PAT:ZigZagging on a Tree
#include <stdio.h>
typedef int ElementType;
typedef struct TreeNode *Tree;
struct TreeNode
{
ElementType Element;
Tree Left;
Tree Right;
int Flag;
};
#define MAXN 30
Tree CreateNode(ElementType X);
Tree CreateTree(ElementType *InOrder, ElementType *PostOrder, int N, int cnt);
void LevelOrder(Tree T);
int Num=0;
int main()
{
int N;
ElementType InOrder[MAXN], PostOrder[MAXN];
Tree BinaryTree;
int i;
scanf("%d", &N);
Num = N;
for (i = 0; i < N; i++)
scanf("%d", &InOrder[i]);
for (i = 0; i < N; i++)
scanf("%d", &PostOrder[i]);
BinaryTree = CreateTree(InOrder, PostOrder, N, 1);
LevelOrder(BinaryTree);
system("pause");
return 0;
}
Tree CreateNode(ElementType X)
{
Tree T;
T = (Tree)malloc(sizeof(struct TreeNode));
T->Element = X;
T->Left = NULL;
T->Right = NULL;
return T;
}
Tree CreateTree(ElementType *InOrder, ElementType *PostOrder, int N, int cnt)
{
Tree T;
ElementType InTreeLeft[MAXN], InTreeRight[MAXN], PostTreeLeft[MAXN], PostTreeRight[MAXN];
int i, j, k = 0;
int N_Left, N_Right;
if (N == 0)
return NULL;
else
{
T = CreateNode(PostOrder[N - 1]);
T->Flag = cnt;
if (N != 1)
{
for (i = 0; InOrder[i] != PostOrder[N - 1]; i++)
InTreeLeft[i] = InOrder[i];
for (j = i + 1; j < N; j++)
InTreeRight[k++] = InOrder[j];
N_Left = i;
N_Right = k;
for (i = 0; PostOrder[i] != InTreeRight[0]; i++)
PostTreeLeft[i] = PostOrder[i];
k = 0;
for (j = i; j < N - 1; j++)
PostTreeRight[k++] = PostOrder[j];
cnt++;
T->Left = CreateTree(InTreeLeft, PostTreeLeft, N_Left, cnt);
T->Right = CreateTree(InTreeRight, PostTreeRight, N_Right, cnt);
}
return T;
}
}
void LevelOrder(Tree T)
{
int result[30][16] = { 0 };
Tree TreeNow;
Tree Queue[30];
int Front=0, Rear=0;
int i[30] = { 0 };
int j, k, l = 0;
int cnt = 1;
Queue[Rear++] = T;
//当队头和队尾相等时,表示队列为空
while (Front < Rear)
{
//队头结点出队
TreeNow = Queue[Front++];
result[TreeNow->Flag - 1][i[TreeNow->Flag - 1]] = TreeNow->Element;
i[TreeNow->Flag - 1]++;
//将队头结点的左右孩子依次入队
if (TreeNow->Left != NULL)
{
Queue[Rear++] = TreeNow->Left;
}
if (TreeNow->Right != NULL)
{
Queue[Rear++] = TreeNow->Right;
}
}
for (j = 0; cnt < Num; j++)
{
if (j % 2 != 0)
{
for (k = 0; result[j][k]!=0; k++)
{
printf("%d", result[j][k]);
if (cnt < Num)
printf(" ");
cnt++;
}
}
else
{
while (result[j][l] != 0)
l++;
for (k = l - 1; k >= 0; k--)
{
printf("%d", result[j][k]);
if (cnt < Num)
printf(" ");
cnt++;
}
}
}
}
...全文
相关推荐
PAT A 甲级 1043 Is It a Binary Search Tree (25分)
【标题解析】:“PAT A 甲级 1043 Is It a Binary Search Tree (25分)” 是一个编程竞赛中的题目,主要考察的是对二叉搜索树(Binary Search Tree,
pat-tree-db:构建中文关键词提取的PAT树,并存储到任何Waterline兼容的数据库
**数据预处理**:首先,"pat-tree-db"会接收中文文本数据,并对其进行预处理,包括分词、去除停用词等,以便于后续的关键词提取。2.
PAT树(Patricia tree)C++源码
PAT(patricia)树的C++实现
Patricia tree
"Patricia Tree,又称PAT Tree,是一种基于Trie结构的特殊索引方法,由D.R. Morrison在1968年提出,并在1992年由Connel进一步发展。它在信息检索和自然语言
pat题目分类.docx
- **Z型层序遍历** (1127 ZigZagging on a Tree): 树的遍历技巧,结合层序遍历和中序遍历的变形。


