YTU 2345: 后序遍历二叉树
2016-05-20 21:25
197 查看
2345: 后序遍历二叉树
时间限制: 1 Sec 内存限制: 128 MB提交: 3 解决: 3
题目描述
给定一颗二叉树,要求输出二叉树的深度以及后序遍历二叉树得到的序列。本题假设二叉树的结点数不超过1000
输入
输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替)。
输出
输出每棵二叉树的深度以及后序遍历二叉树得到的序列。
样例输入
2 1 -1 1 2 0 3 4 -1
样例输出
1 1 3 3 4 2 1
代码:
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> using namespace std; typedef struct Node //定义二叉树 { int data; Node* lchild; Node* rchild; } TBNode; int depin; void Init(TBNode *T) //建立二叉树 { TBNode *a[105]; TBNode *p=T; int real=0; while(cin>>p->data&&p->data!=-1) //层序输入数据 { a[++real]=p; //当前节点入队 if(real/2!=0) //如果不是根节点,为当前节点父节点添加指针 { if(real%2)a[real/2]->rchild=p; //如果不能整除二说明是它父节点的右孩子 else a[real/2]->lchild=p; //否则为父节点左孩子 } p->lchild=NULL; //当前节点孩子指针域设置为NULL p->rchild=NULL; p=(TBNode*)malloc(sizeof(TBNode)); } depin=(int)ceil(log2(real+1)); //二叉树深度为所有节点个数加一 log2(real+1)向上取整 } void Print(TBNode *T) //先序输出二叉树 { if(T!=NULL) { Print(T->lchild); Print(T->rchild); printf(T->data?" %d":"",T->data); } } int main() { int N; cin>>N; TBNode *Tree; //根节点 Tree=(TBNode*)malloc(sizeof(TBNode)); while(N--) { Init(Tree); //建立二叉树 printf("%d",depin); //输出深度 Print(Tree); //输出二叉树 printf("\n"); } return 0; }
相关文章推荐
- c++第六次上机实验
- Ubuntu14.04LTS下学习python2.7.6里程
- android消息处理机制之2handler与looper,MessageQueue:的关系
- 饿了么开源项目Hermes:新颖巧妙易用的Android进程间通信IPC框架
- Box2D C++ 教程-传感器
- hdu 1530
- YTU 2346: 中序遍历二叉树
- 一个平凡的开始
- Box2D C++ 教程-碰撞过滤
- Linux下查看MySQL的安装路径
- Word Aurora公式编辑器介绍、配置、快捷键
- lordofpomelo
- LeetCode 48
- Java之arrayList 方法二
- Problem3-1022
- Unsupported configuration attributes: [FILE_UPLOAD]
- Unsupported configuration attributes: [FILE_UPLOAD]
- 数据库优化
- 什么是JAR包?
- Box2D C++ 教程-碰撞回调