版权声明:欢迎大佬批评指正!O(∩_∩)O https://blog.csdn.net/wyh1618/article/details/82926167
2344: 先序遍历二叉树
给定一颗二叉树,要求输出二叉树的深度以及先序遍历二叉树得到的序列。本题假设二叉树的结点数不超过1000。
输入
输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替),比如输入:
1 2 0 3 4 -1得到的二叉树如下:
1
2 #
3 4
输出
输出每棵二叉树的深度以及先序遍历二叉树得到的序列。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<malloc.h>
#include<math.h>
using namespace std;
typedef struct Node
{
int data;
struct Node *lchild;
struct Node *rchild;
}BTNode;
int depth=0;
void CreatBTree(BTNode *T)
{
BTNode *a[110];
BTNode *p=T;
int rear=0;
while(cin>>p->data&&p->data!=-1)
{
a[++rear]=p;
if(rear/2!=0)
{
if(rear%2)
{
a[rear/2]->rchild=p;
}
else
{
a[rear/2]->lchild=p;
}
}
p->lchild=NULL;
p->rchild=NULL;
p=(BTNode *)malloc(sizeof(BTNode));
}
depth=(int)ceil(log2(rear+1));
}
void preOrder(BTNode *T)
{
if(T!=NULL)
{
printf(T->data?" %d":"",T->data);
preOrder(T->lchild);
preOrder(T->rchild);
}
}
int main()
{
int n;
BTNode *T;
T=(BTNode *)malloc(sizeof(BTNode));
scanf("%d",&n);
while(n--)
{
CreatBTree(T);
printf("%d",depth);
preOrder(T);
printf("\n");
}
return 0;
}