#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
const int maxn = 200 + 5;
int sum[maxn] = { 0 };//统计每一层的总和
void build(int p)//递归建树的过程
{
int v;
cin >> v;
if (v == -1)//-1则表明相应的节点无数,返回上一层
return;
sum[p] += v;//统计同一条线上的总和
build(p - 1);
build(p + 1);
}
bool read()
{
int x;
cin >> x;
memset(sum, 0,sizeof(sum));
if (x == -1)
return false;
int pos = maxn / 2;//以中间点开始建立树,第一个数作为根节点
sum[pos] = x;
build(pos - 1), build(pos + 1);//建树完成之后则自动返回,注意递归的结束条件的控制
}
int main()
{
int cas = 0;
while (read())
{
int count = 0;
while (sum[count] == 0)count++;
printf("Case %d:\n%d", ++cas,sum[count++]);
while (sum[count] != 0)
printf(" %d", sum[count++]);
printf("\n\n");//注意输出格式,两种情况之间
}
getchar();
getchar();
return 0;
}
1、总结一下二叉树建树的特点,一定理解二叉树建树的核心为递归的思想,强大的递归思想,建树完成之后递归可自动结束,建立递归关系时,注意想清楚层与层之间的关系以及层与层之间的返回关系
2、利用数组建树的特点,注意层数控制清楚,利用计数器控制层数
3、再次熟悉先序遍历,中序遍历,后序遍历,注意是根据根节点的说明位置有关