码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的递归遍历 The Falling Leaves UVa 699

时间:2017-07-27 10:43:53      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:style   out   代码   max   iostream   lin   image   span   .com   

技术分享

题意:对于每一棵树,每一个结点都有它的水平位置,左子结点在根节点的水平位置-1,右子节点在根节点的位置+1,从左至右输出每个水平位置的节点之和

解题思路:由于上题所示的遍历方式如同二叉树的前序遍历,与天平那题不同,本题不需要构造出完整的结点左右子树,只需要构造出结点的相对位置,每次输入一个结点树,若为-1,则返回,否则依次递归执行input(p-1)与input(p+1)。

代码如下:

 1 #include<stdio.h>
 2 #include<cstring>
 3 #include<iostream>
 4 using namespace std;
 5 const int MAXX=260000;
 6 int sum[MAXX];
 7 void input(int p){
 8     int root;
 9     scanf("%d",&root);
10     if(root==-1)  return;
11     sum[p]+=root;
12     input(p-1);
13     input(p+1);
14 }
15 
16 bool init(){
17     int root;
18     scanf("%d",&root);
19     if(root==-1)    return false;
20     int d;
21     memset(sum,0,sizeof(sum));
22     d=MAXX/2;
23     sum[d]=root;
24     input(d-1);
25     input(d+1);
26 }
27 
28 int main(){
29     freopen("in.txt","r",stdin);
30     int i=1;
31     while(init()){
32         printf("Case %d:\n",i);
33         int num=0;
34         while(sum[num]==0){
35             num++;
36         }
37         while(sum[num]!=0){
38             printf("%d%c",sum[num],sum[num+1]? :\n\n );
39             num++;
40         }
41         cout<<endl;
42         i++;
43     }
44 }

 

二叉树的递归遍历 The Falling Leaves UVa 699

标签:style   out   代码   max   iostream   lin   image   span   .com   

原文地址:http://www.cnblogs.com/muziqiu/p/7243253.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!