下落的树叶,紫书P159UVa699

来源:互联网 发布:西安培训班软件 编辑:程序博客网 时间:2024/04/24 20:52

此题可以说是天平的同一种类型题。运用DFS的方法来直接构建,计算二叉树。本题采用数组标记法是很直观的思路,刚开始由于不知道原题目规定了树的最大水平宽度不超过80,因此建一个200的数组就足够了。
核心还是递归程序的构建,要反复思考。

// UVa699 The Falling Leaves// Rujia Liu#include<cstring>#include<iostream>using namespace std;const int maxn = 200;int sum[maxn];void build(int p) {  int v;  cin >> v;  if(v == -1) return; //递归出口  sum[p] += v;  build(p - 1);//DFS  build(p + 1);}bool init() {  int v;  cin >> v;  if(v == -1) return false;  memset(sum, 0, sizeof(sum));  int pos = maxn/2; //根节点设在数组最中间  sum[pos] = v;  build(pos - 1); //DFS  build(pos + 1); }int main() {  int kase = 0;  while(init()) {    int p = 0;    while(sum[p] == 0) p++;     cout << "Case " << ++kase << ":\n" << sum[p++];    while(sum[p] != 0) {      cout << " " << sum[p];      p++;    }    cout << "\n\n";  }  return 0;}