头文件
#include<stdio.h>
#include<stdlib.h>
二叉树的声明
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
}
先序遍历(递归)
void PreorderTraversal(BinTree BT){
if(BT){
printf("%d",BT->Data);
PreorderTravel(BT->Left);
PreorderTravel(BT->Right);
}
}
中序遍历(递归)
void InorderTraversal(BinTree BT){
if(BT){
InorderTraversal(BT->Left);
printf("%d",BT->Data);
InorderTraversal(BT->Right);
}
}
后序遍历(递归)
void PostTraversal(BinTree BT){
if(BT){
PostTraversal(BT->Left);
PostTraversal(BT->Right)
printf("%d",BT->Data);
}
}
中序遍历(迭代)
void InorderTraversal(BinTree BT){
BinTree T;
Stcak S = CreateStack();
T=BT;
while( T || !IsEmpty(S)){
while(T){
Push(S,T);
T=T->Left;
}
T=Pop(S);
printf("%d",T->Data);
T->Right;
}
}
层序遍历
void LevelorderTraversal(BinTree BT){
Queue Q;
BinTree T;
if(!BT) return;
Q=CreateQueue();
AddQ(Q,BT);
while( !IsEmpty(Q) ){
T=DeleteQ(Q);
printf("%d",T->Data);
if(T->Left) AddQ(Q,T->Left);
if(T->Right) AddQ(Q,T->Right)
}
}
输出叶结点
void PreorderPrintLeaves(BinTree BT){
if(BT){
if( !BT->Left && !BT->Right)
printf("%d,BT->Data");
PreorderPrintLeaves(BT->Left);
PreorderPrintLeaves(BT->Right);
}
}
输出树的高度
int GetTreeHeight(BinTree BT){
int HL,HR,MaxH;
if(BT){
HL=GetTreeHeight(BT->Left);
HR=GetTreeHeight(BT->Right);
MaxH= HL>HR ? HL:HR;
return(MaxH+1);
}
else return 0;
}
层序生成二叉树
typedef int ElementType;
#define Noinfo 0;
BinTree CreateBinTree(){
Queue Q;
ElementType Data;
BinTree T,BT;
T=BT;
Q=CreateQueue();
scanf("%d",&Data);
if(Data!=Noinfo){
BT=(BinTree)malloc(sizeof(struct TNode));
BT->Data=Data;
BT->Left=BT->Right=NULL;
AddQ(Q,BT)
}
else
return NULL;
while(!IsEmpty(Q)){
T=DeleteQ(Q);
scanf("%d",&Data);
if(Data != Noinfo){
T->Left=(BinTree)malloc(sizeof(struct TNode));
T->Left->Data=Data;
T->Left->Left=T->Left->Right=NULL;
AddQ(Q,T->Left);
}
else T->Left=NULL;
scanf("%d",&Data);
if(Data != Noinfo){
T->Right=(BinTree)malloc(sizeof(struct TNode));
T->Right->Data=Data;
T->Right->Left=T->Right->Right=NULL;
AddQ(Q,T->Right);
}
else return T->Right=NULL;
}
return BT;
}