UVA - 699 The Falling Leaves (给出前序遍历,构建二叉树)

xiaoxiao2021-02-28  19

题目链接:点击打开链接

题意:给出输出二叉树的前序遍历,当 输入值为 -1 时,说明指针为空;若输入二叉树第一个值为-1时,整个文件结束,让你输出二叉树从左到右 每一列的和的值;

思路:构造二叉树,用数组存每一列的值;

代码:

#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define Max 10010 #define INF 0x3f3f3f3f struct node { int tt; node *left; node *right; node(int k) //对每个新建节点的初始化; { tt = k; left = NULL; right = NULL; } }; int a[Max],left,right,f; node *build(node *root,int num) //构建二叉树 { int k; scanf("%d",&k); // 前序遍历构造二叉树时,直接输入; if(k==-1) return NULL; else { node *pp = new node(k); // 新建节点; a[num]+=k; //存每一列的值 pp->left = build(pp->left,num-1); pp->right = build(pp->right,num+1); left = min(left,num); //找出最左最右; right = max(right,num); return pp; } } int read() { memset(a,0,sizeof(a)); f=0; left = INF; right = -INF; node *root = NULL; root = build(root,5000); if(root==NULL) return 0; else return 1; } int main() { int i,t=1; while(read()) { printf("Case %d:\n",t++); for(i=left;i<=right;i++) { if(i==right) printf("%d\n\n",a[i]); else printf("%d ",a[i]); } } return 0; }

转载请注明原文地址: https://www.6miu.com/read-1700309.html

最新回复(0)