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

Posted 木子丘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的递归遍历 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:\\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的主要内容,如果未能解决你的问题,请参考以下文章

UVa 699 The Falling Leaves(递归建树)

UVa699 - The Falling Leaves

Java实现二叉树的创建递归/非递归遍历

二叉树的非递归遍历

排序二叉树的遍历( 用递归或非递归的方法都可以)

《数据结构》遍历二叉树的非递归算法的疑问。