UVA 6-10 699

来源:互联网 发布:查看ip端口是否打开 编辑:程序博客网 时间:2024/06/05 06:50

这又是一道二叉树的题目,按照先序遍历(根 左 右),然后让你求每一同列的树叶的和

方法是建立一个数组从中间开始左右分叉,同列的下标相同则同加

#include<cstring>#include<iostream>using namespace std;const int maxn = 200;int sum[maxn];// 输入并统计一棵子树,树根水平位置为pvoid build(int p) {  int v;  cin >> v;  if(v == -1) return; // 空树  sum[p] += v;  build(p - 1);//左树  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); // 左子树  build(pos + 1); // 右子树}int main() {  int kase = 0;  while(init()) {    int p = 0;    while(sum[p] == 0) p++; // 找最左边的叶子    cout << "Case " << ++kase << ":\n" << sum[p];     for(int i=p+1;sum[i]!=0;i++){      cout << " " << sum[p];    }    cout << "\n\n";  }  return 0;}
感觉这道题很简单也好理解,比起之前的二叉树来说

0 0
原创粉丝点击