您的位置:首页 > 其它

九度 题目1521:二叉树的镜像

2014-05-20 17:11 176 查看
题目来源:http://ac.jobdu.com/problem.php?pid=1521

时间限制:1 秒

内存限制:128 兆

特殊判题:否

提交:1083

解决:277

题目描述:

输入一个二叉树,输出其镜像。





输入:

输入可能包含多个测试样例,输入以EOF结束。

对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。

Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。

Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。

Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。

Ci=’z’表示第i个节点没有子孩子。

输出:

对应每个测试案例,

按照前序输出其孩子节点的元素值。

若为空输出NULL。

样例输入:
7
8 6 10 5 7 9 11
d 2 3
d 4 5
d 6 7
z
z
z
z


样例输出:
8 10 11 9 6 7 5


#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int MAXN = 1010;

struct Binary_Node
{
int iData;
Binary_Node* pLChild;
Binary_Node* pRChild;
Binary_Node()
{
iData = 0;
pLChild = pRChild = NULL;
}
};
int arr[MAXN], pos;
Binary_Node* Binary_Tree[MAXN];

void Modify_Binary_Tree(Binary_Node* pRoot)
{
if(pRoot == NULL)
return ;
Binary_Node* tmp = pRoot->pLChild;
pRoot->pLChild = pRoot->pRChild;
pRoot->pRChild = tmp;
Modify_Binary_Tree(pRoot->pLChild);
Modify_Binary_Tree(pRoot->pRChild);
}

void Print_Binary_Tree(Binary_Node* pRoot)
{
if(pRoot == NULL)
return ;
arr[pos++] = pRoot->iData;
Print_Binary_Tree(pRoot->pLChild);
Print_Binary_Tree(pRoot->pRChild);
}

void Delete_BinaryTree(int n)
{
int i;
for(i = 0; i <= n; ++i)
delete Binary_Tree[i];
}

int main()
{
int n, i, a, b;
char c;
while(~scanf("%d", &n))
{
if(n == 0)
{
printf("NULL\n");
continue ;
}
for(i = 0; i <= n; ++i)
Binary_Tree[i] = new Binary_Node();
for(i = 1; i <= n; ++i)
cin>>Binary_Tree[i]->iData;
for(i = 1; i <= n; ++i)
{
cin>>c;
if(c == 'd')
{
scanf("%d %d", &a, &b);
Binary_Tree[i]->pLChild = Binary_Tree[a];
Binary_Tree[i]->pRChild = Binary_Tree[b];
}
else if(c == 'l')
{
scanf("%d", &a);
Binary_Tree[i]->pLChild = Binary_Tree[a];
}
else if(c == 'r')
{
scanf("%d", &a);
Binary_Tree[i]->pRChild = Binary_Tree[a];
}
}

Modify_Binary_Tree(Binary_Tree[1]);

pos = 0;
memset(arr, 0, sizeof(arr));
Print_Binary_Tree(Binary_Tree[1]);
printf("%d", arr[0]);
for(i = 1; i < pos; ++i)
printf(" %d", arr[i]);
printf("\n");
Delete_BinaryTree(n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: