题目要求:
创建如下图所示二叉树,并完成以下功能:
(1)定义一个create()函数,创建这棵二叉树
(2)分别采用先序遍历、中序遍历、后序遍历这三种方法遍历这棵二叉树,按顺序输出节点;
(3)设计函数nodecount(),计算这棵二叉树的节点个数。
以上每一步都做成函数,并给出相关代码。
参考代码:
#include <stdio.h>
#include <string.h>
#define ElemType char
//构造结点的结构体
typedef struct BTNode{
ElemType data;//数据域
struct BTNode *lchild,*rchild;//左右孩子指针
}BTNode;
//初始化树的函数
BTNode* Create(){
BTNode *p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
p1=(BTNode*)malloc(sizeof(BTNode));
p1->data='A';
p1->lchild=NULL;
p1->rchild=NULL;
p2=(BTNode*)malloc(sizeof(BTNode));
p2->data='B';
p2->lchild=NULL;
p2->rchild=NULL;
p3=(BTNode*)malloc(sizeof(BTNode));
p3->data='C';
p3->lchild=NULL;
p3->rchild=NULL;
p4=(BTNode*)malloc(sizeof(BTNode));
p4->data='D';
p4->lchild=NULL;
p4->rchild=NULL;
p5=(BTNode*)malloc(sizeof(BTNode));
p5->data='E';
p5->lchild=NULL;
p5->rchild=NULL;
p6=(BTNode*)malloc(sizeof(BTNode));
p6->data='F';
p6->lchild=NULL;
p6->rchild=NULL;
p7=(BTNode*)malloc(sizeof(BTNode));
p7->data='G';
p7->lchild=NULL;
p7->rchild=NULL;
p8=(BTNode*)malloc(sizeof(BTNode));
p8->data='H';
p8->lchild=NULL;
p8->rchild=NULL;
p9=(BTNode*)malloc(sizeof(BTNode));
p9->data='I';
p9->lchild=NULL;
p9->rchild=NULL;
//连接
p1->lchild=p2;
p2->lchild=p4;
p2->rchild=p5;
p5->lchild=p7;
p7->rchild=p9;
p1->rchild=p3;
p3->lchild=p6;
p6->rchild=p8;
return p1;
}
//先序遍历
void PreorderTraverse(BTNode *T){
if(T!=NULL){
printf("%c,",T->data);
PreorderTraverse(T->lchild);
PreorderTraverse(T->rchild);
}
}
//中序遍历
void InorderTraverse(BTNode *T){
if(T!=NULL){
InorderTraverse(T->lchild);
printf("%c,",T->data);
InorderTraverse(T->rchild);
}
}
//后续遍历
void PostorderTraverse(BTNode *T){
if(T!=NULL){
PostorderTraverse(T->lchild);
PostorderTraverse(T->rchild);
printf("%c,",T->data);
}
}
//计算二叉树结点个数
int count=0;
void nodecount(BTNode *T){
if(T!=NULL){
count++;
nodecount(T->lchild);
nodecount(T->rchild);
}
}
int main() {
BTNode* BinTree;
//初始化二叉树
BinTree=Create();
printf("先序遍历:");
PreorderTraverse(BinTree);
printf("\n中序遍历:");
InorderTraverse(BinTree);
printf("\n后序遍历:");
PostorderTraverse(BinTree);
nodecount(BinTree);
printf("\n二叉树的结点个数为:%d",count);
printf("\n");
system("pause");
return 0;
}
运行结果:
1.先序遍历:
2.中序遍历:
3.后序遍历:
4.统计结点个数: