二叉树的建立:
#include<stdio.h>
#include<stdlib.h>
int count=0; //全局变量
typedef struct tnode
{
char data;
struct tnode * rchild;
struct tnode * lchild;
}BT;
BT * CreateTree()
{
BT * t;
char ch;
scanf("%c",&ch);
getchar();
if(ch=='0')//ch==0表示空结点
t=NULL;
else
{
t=(BT * )malloc(sizeof(BT));
t->data=ch;
printf("输入%c结点的左孩子结点:",t->data);
t->lchild=CreateTree();
printf("输入%c结点的右孩子结点:",t->data);
t->rchild=CreateTree();
}
return t;
}
二叉树的遍历:
void PreOrder(BT * t)//前序遍历
{
if(t)
{
printf("%c",t->data);
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}
void InOrder(BT * t)//中序遍历
{
if(t)
{
InOrder(t->lchild);
printf("%c",t->data);
InOrder(t->rchild);
}
}
void PostOrder(BT * t)//后序遍历
{
if(t)
{
PostOrder(t->lchild);
PostOrder(t->rchild);
printf("%c",t->data);
}
}
求二叉树的深度:
int depth(BT * t)//用递归求深度
{
int h,lh,rh;
if(t==NULL) h=0;//临界状态
else
{
lh=depth(t->lchild);
rh=depth(t->rchild);
if(lh>rh) h=lh+1;
else h=rh+1;
}
return h;
}
求二叉树的结点(1):
int num(BT * t)
{
if(t==NULL) return 0;
else
return (num(t->lchild)+num(t->rchild)+1);//加一是计算根节点
求二叉树的结点(2):
void num(BT * t)
{
if(t)
{
count++;//全局变量
num(t->lchild);
num(t->rchild);
}
}
求二叉树的叶子结点:
void leafnum(BT * t)
{
if(t)
{
if(t->lchild==NULL&&t->rchild==NULL)
count++;
leafnum(t->lchild);
leafnum(t->rchild);
}
}
二叉树的查找:
BT* locate(BT * t,char x)
{
BT * p;
if(t==NULL)
return NULL;
else if(t->data=x)
return t;
else
{
p=locate(t->lchild,x);
if(p) return p;
else return locate(t->rchild,x);
}
}