The Falling Leaves UVA - 699 (二叉树列和)

雨点打透心脏的1/2处 2022-02-27 05:58 258阅读 0赞

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FsZXgxOTk3MjIy_size_16_color_FFFFFF_t_70

解题思路:

可以设定一个中间值pos,每次插入结点时往左节点为pos-1,右节点为pos+1,开一个数组累加每个pos的和,最后输出

数据的输入为先序遍历顺序,-1为空结点

if (cin.get() == ‘\n’) return; 可以检测回车换行

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. #include <queue>
  5. #include <string.h>
  6. using namespace std;
  7. const int MAXN = 10010; //结点个数
  8. int sbTree[MAXN]; //树
  9. bool isroot = true;
  10. int tempNode;
  11. int sindex = 0;
  12. void dfs_tTree(int spos) {
  13. cin >> tempNode;
  14. if (isroot == true && tempNode == -1) return;
  15. isroot = false;
  16. if (cin.get() == '\n') return; //检测回车
  17. if (tempNode == -1) return; //如果是-1,则直接退出
  18. sbTree[spos] += tempNode; //首先进行赋;
  19. dfs_tTree(spos - 1);
  20. dfs_tTree(spos + 1);
  21. }
  22. int main() {
  23. while (true) {
  24. isroot = true;
  25. memset(sbTree, 0, sizeof(sbTree));
  26. dfs_tTree(MAXN/2);
  27. if(isroot == true) break;
  28. //输出结果
  29. bool falg = true;
  30. printf("Case %d:\n", ++sindex);
  31. for (int i = 0; i < MAXN; ++i) {
  32. if (sbTree[i] != 0 && sbTree[i] != -1) {
  33. if (falg) {
  34. printf("%d", sbTree[i]);
  35. falg = false;
  36. }
  37. else {
  38. printf(" %d", sbTree[i]);
  39. }
  40. }
  41. }
  42. cout << endl<<endl;
  43. }
  44. system("PAUSE");
  45. return 0;
  46. }

发表评论

表情:
评论列表 (有 0 条评论,258人围观)

还没有评论,来说两句吧...

相关阅读

    相关 S-Trees UVA712(

    题目读了半天,差点被吓住!题目本身很简单,就是一颗满二叉树,向左(2\temp),向右(2\temp+1),最后减去(1<<n)-1;(即非叶子结点的个数,因为储存叶子结点是从