数据结构练习(二叉树)

题目要求:
创建如下图所示二叉树,并完成以下功能:
(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.统计结点个数:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46220576/article/details/123094299