刚刚接触数据结构(C),遇到问题(二叉树)无从下手,还请各位兄长指教。
问题描述:已知二叉树t,分别采用顺序存储结构、二叉链表存储结构实现求二叉树的深度,并对二叉树分别进行中序遍历。要求:
1、二叉树分别采用顺序或二叉链表存储。
2、树中的数据类型约定为整型
3、按先序序列创建二叉树t,用递归算法求二叉树的深度,并对二叉树分别进行前序、中序、后序遍历。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAX 50
#define NULL 0
typedef struct BNode{
int data;
struct BNode *lchild;
struct BNode *rchild;
}BNode;//,*BiTree;
typedef BNode *BiTree;
//插入新结点
int InsertNode(BiTree *T,int e){
BNode *f,*p;
p=*T;
while(p){
f=p;
if(p->data==e) return 0;
else if(e<p->data) p=p->lchild;
else p=p->rchild;
}
p=(BiTree)malloc(sizeof(BNode));
p->data=e;
p->lchild=NULL;
p->rchild=NULL;
if(*T==NULL) *T=p;
else if(e<f->data) f->lchild=p;
else f->rchild=p;
return 1;
}
//二叉排序树的创建
BiTree Creat(BiTree T){
//BiTree T=NULL;
int e;
T=NULL;
scanf("%d",&e);
while(e!='#'){
InsertNode(&T,e);
scanf("%d",&e);
}
return T;
}
//二叉树深度
int depth(BiTree *T)
{
int dep1,dep2;
if (T==NULL)
return(0);
else
{
dep1=depth(T->lchild);
dep2=depth(T->rchild);
if (dep1>dep2)
return(dep1+1);
else
return(dep2+1);
}
}
//前序遍历二叉树
int ProTree(BiTree T){
BiTree p=T;
if(p){
printf("%d",p->data);
ProTree(p->lchild);
ProTree(p->rchild);
return 1;
}
}
//中序遍历二叉树
int MidTree(BiTree T){
BiTree p=T;
if(p==NULL) return 0;
MidTree(p->lchild);
printf("%d",p->data);
MidTree(p->rchild);
return 1;
}
//后序遍历二叉树
int PosTree(BiTree T){
BiTree p=T;
if(p!=NULL){
PosTree(p->lchild);
PosTree(p->rchild);
printf("%d",p->data);
return 1;
}
}
void main(){
BiTree T;
Creat(T);
ProTree(T);
MidTree(T);
PosTree(T);
}
劳烦大家修改阿~
[[italic] 本帖最后由 darlingxixi 于 2007-12-15 12:00 编辑 [/italic]]