数据结构_二叉树

#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
	int data;
	BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTNode *CreatTree(){
	BiTNode *t;
	int x;
	scanf("%d",&x);
	getchar();
	if(x==0) t=NULL;
	else{
		t =(BiTree)malloc(sizeof(BiTNode));
		t->data=x;
		printf("请输入%d结点的左结点:",t->data);
		t->lchild=CreatTree();
		printf("请输入%d结点的右结点:",t->data);
		t->rchild=CreatTree();	 
	} 
	return t;
}
//	先序遍历 
void PreOrder(BiTNode *T){
	if(T){
		printf("%3d",T->data);
		PreOrder(T->lchild);
		PreOrder(T->rchild);
	}
} 
//	中序遍历 
void InOrder(BiTNode *T){
	if(T){
		InOrder(T->lchild);
		printf("%3d",T->data);
		InOrder(T->rchild);
	}
} 
//	后序遍历 
void PostOrder(BiTNode *T){
	if(T){
		PostOrder(T->lchild);
		PostOrder(T->rchild);
		printf("%3d",T->data);
	}
}
//	层次遍历
void levelOder(BiTNode *T){
	int i,j;
	BiTNode *q[100],*p;
	p=T;
	if(p!=NULL){
		i=1;
		q[i]=p;
		j=2;
	}
	while(i!=j){
		p=q[i];
		printf("%3d",p->data);
		if(p->lchild!=NULL){
			q[j]=p->lchild;
			j++;
		}
		if(p->rchild!=NULL){
			q[j]=p->rchild;
			j++;
		}
		i++;	
	}
	
} 
//	求叶子数
void LeafNum(BiTNode *T){
	if(T){
		if(T->lchild==NULL&&T->rchild==NULL)count++;
		LeafNum(T->lchild);
		LeafNum(T->rchild);
	}
}
//	求结点数
void NodeNum(BiTNode *T){
	if(T){
		count++;
		NodeNum(T->lchild);
		NodeNum(T->rchild);
	}
}
//	求树的深度 
void TreeDepth(BiTNode *T){
	int ldep,rdep;
	if(T==NULL)return 0;
	else{
		ldep=TreeDepth(T->lchild);
		rdep=TreeDepth(T->rchild);
		if(ldep>rdep)return ldep+1;
		else return rdep+1;
	}
}

int main(){
	BiTNode *T=NULL;
	printf("输入根节点:"); 
	T=CreatTree();
	printf("\n");
	PreOrder(T);
	printf("\n");
	InOrder(T);
	printf("\n");
	PostOrder(T);
	printf("\n");
	levelOder(T);
} 

 

上一篇:判断完全二叉树


下一篇:数据结构_二叉排序树