YTU OJ2344: 先序遍历二叉树

版权声明:欢迎大佬批评指正!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;
}

 

猜你喜欢

转载自blog.csdn.net/wyh1618/article/details/82926167