二叉树创建、遍历、计算结点、计算深度
head.h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef char datatype;
typedef struct Btree{
datatype data;
struct Btree *lchild;
struct Btree *rchild;
}*btree;
btree create();
void insert_child(datatype e,btree tree);
void first(btree tree);
void mid(btree tree);
void last(btree tree);
void count(btree tree,int *n0,int *n1,int *n2);
int high(btree tree);
main.c
#include "head.h"
int main(int argc, const char *argv[]){
btree tr=create();
first(tr);
puts("");
mid(tr);
puts("");
last(tr);
puts("");
int *n0,*n1,*n2,N0,N1,N2;
n0=&N0,n1=&N1,n2=&N2;
*n0=0,*n1=0,*n2=0;
count(tr,n0,n1,n2);
printf("%d %d %d\n",*n0,*n1,*n2);
printf("深度为%d\n",high(tr));
return 0;
}
test.c
#include "head.h"
btree create_node(){
btree p=(btree)malloc(sizeof(struct Btree));
p->data=0;
p->lchild=NULL;
p->rchild=NULL;
}
btree create(){
datatype e;
printf("please input e:");
scanf("%c",&e);
getchar();
if(e=='#')
return NULL;
btree tr=create_node();
tr->data=e;
puts("创建左孩子");
tr->lchild=create();
puts("创建右孩子");
tr->rchild=create();
return tr;
}
void first(btree tree){
if(!tree)
return;
printf("%c ",tree->data);
first(tree->lchild);
first(tree->rchild);
}
void mid(btree tree){
if(!tree)
return;
mid(tree->lchild);
printf("%c ",tree->data);
mid(tree->rchild);
}
void last(btree tree){
if(!tree)
return;
last(tree->lchild);
last(tree->rchild);
printf("%c ",tree->data);
}
void count(btree tree,int *n0,int *n1,int *n2){
if(!tree)
return;
if(!tree->lchild&&!tree->rchild)
++*n0;
else if(tree->lchild&&tree->rchild)
++*n2;
else
++*n1;
count(tree->lchild,n0,n1,n2);
count(tree->rchild,n0,n1,n2);
}
int high(btree tree){
if(!tree)
return 0;
int left=1+high(tree->lchild);
int right=1+high(tree->rchild);
return left>right?left:right;
}
结果展示: