数据结构练习题---后序遍历二叉树

来源:互联网 发布:南通seo招聘 编辑:程序博客网 时间:2024/06/02 19:40

描述

给定一颗二叉树,要求输出二叉树的深度以及后序遍历二叉树得到的序列。本题假设二叉树的结点数不超过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>#define MX 1010using namespace std;int a[MX];typedef struct node{    int data;    struct node *lchild,*rchild;}node,*Btree;void create(Btree &t,int i){    if(i>a[0]||a[i]==0){t=NULL;return ;}    t=new node;    t->data=a[i];    create(t->lchild,2*i);    create(t->rchild,2*i+1);}void preorder(Btree t){    if(t)    {        preorder(t->lchild);        preorder(t->rchild);        cout<<" "<<t->data;    }}int depth(Btree t){    int dep=0,depl,depr;    if(!t)dep=0;    else    {        depl=depth(t->lchild);        depr=depth(t->rchild);        dep=1+(depl>depr?depl:depr);    }    return dep;}int main(){    Btree t;    int dep,n,x;    cin>>n;    while(n--){        a[0]=0;        while(cin>>x&&x!=-1)a[++a[0]]=x;        create(t,1);        dep=depth(t);        cout<<dep;        preorder(t);        cout<<endl;    }    return 0;}


原创粉丝点击