zoukankan      html  css  js  c++  java
  • 二叉树的递归遍历 The Falling Leaves UVa 699

    题意:对于每一棵树,每一个结点都有它的水平位置,左子结点在根节点的水平位置-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:
    ",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]?' ':'
    
     ');
    39             num++;
    40         }
    41         cout<<endl;
    42         i++;
    43     }
    44 }
  • 相关阅读:
    Ubuntu下下载Android源码
    升级Android 3.1ADT 和SDK
    ubuntu10.04手动安装jdk1.6.0_24配置
    安装VM Tools
    Singleton (单件模式)
    biztalk2004安装时应该注意的几点
    欢迎高手加入.NET技术群
    Observer(观察者模式)
    无眠
    A⑤权限管理分配权限:提交的是节点的id列表
  • 原文地址:https://www.cnblogs.com/muziqiu/p/7243253.html
Copyright © 2011-2022 走看看