问题 A: 中序遍历二叉树
提交: 154 | 解决: 104 | 时间限制: 1s | 内存限制: 128MB
[提交][状态][讨论版][命题人: 外部导入]
题目描述
给定一颗二叉树,要求输出二叉树的深度以及中序遍历二叉树得到的序列。本题假设二叉树的结点数不超过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 2 4 1
太顶了
#include<stdio.h>
#include<stdio.h>
#define MaxSize 1000
#include<malloc.h>
typedef struct BTNode{
int data;
struct BTNode * lchild;
struct BTNode * rchild;
}BTNode;
int getDepth(BTNode *bt){
int DL,DR;
if(bt==NULL) return 0;
else{
DL=getDepth(bt->lchild);
DR=getDepth(bt->rchild);
return (DL>DR?DL:DR)+1;
}
}
void inorderNonrecursion(BTNode *bt){
BTNode *stack[MaxSize],* p;
//int front=0,rear=0; 队列才有头和尾。栈只有top指针
int top=-1;
p=bt;
while(top!=-1||p!=NULL){
while(p!=NULL){
stack[++top]=p;
p=p->lchild;
}
if(top!=-1){
p=stack[top--];
printf("%d ",p->data);
p=p->rchild;
}
}
}
int CreateTree(int n){
int m,i;
BTNode *bt,*p;
BTNode *que[MaxSize];
int front=0,rear=0;
while(n>0){
bt=(BTNode *)malloc(sizeof(BTNode));
scanf("%d",&bt->data);
bt->lchild=bt->rchild=NULL;
que[rear]=bt;
do{
for(i=0;i<2;i++){
scanf("%d",&m);
if(m==-1){
break;
}
if(m!=0){
p=(BTNode *)malloc(sizeof(BTNode));
p->data=m;
p->lchild=p->rchild=NULL;
if(i==0){
que[front]->lchild=p;
}else if(i==1){
que[front]->rchild=p;
}
que[++rear]=p;
}
}
++front;
}while(m!=-1&&front<=rear);
front=rear=0;
int depth;
depth=getDepth(bt);
printf("%d ",depth);
inorderNonrecursion(bt);
printf("\n");
n--;
}
}
int main(){
int n;
scanf("%d",&n);
CreateTree(n);
}