内容:使用二叉链表存储结构建立一棵二叉树,完成如下功能: 1.创建二叉树 2.先序遍历二叉树 3.中序遍历二叉树 4.后序遍历二叉树 5.求二叉树深度 6.求二叉树叶子结点个数用c语言
时间: 2023-11-14 22:35:55 浏览: 103
#include<stdio.h>
#include<stdlib.h>
//定义二叉树的结构体
typedef struct node{
char data;
struct node *lchild;
struct node *rchild;
}BTNode;
//创建二叉树
BTNode *CreateBTree(){
char ch;
scanf("%c", &ch);//输入字符
if(ch == ' '){//空格表示空节点
return NULL;
}
BTNode *root = (BTNode*)malloc(sizeof(BTNode));//创建一个节点
root->data = ch;//节点值为输入的字符
root->lchild = CreateBTree();//递归创建左子树
root->rchild = CreateBTree();//递归创建右子树
return root;
}
//先序遍历
void PreOrder(BTNode *root){
if(root == NULL){
return;
}
printf("%c ", root->data);//先访问根节点
PreOrder(root->lchild);//递归遍历左子树
PreOrder(root->rchild);//递归遍历右子树
}
//中序遍历
void InOrder(BTNode *root){
if(root == NULL){
return;
}
InOrder(root->lchild);//递归遍历左子树
printf("%c ", root->data);//访问根节点
InOrder(root->rchild);//递归遍历右子树
}
//后序遍历
void PostOrder(BTNode *root){
if(root == NULL){
return;
}
PostOrder(root->lchild);//递归遍历左子树
PostOrder(root->rchild);//递归遍历右子树
printf("%c ", root->data);//访问根节点
}
//求二叉树深度
int Depth(BTNode *root){
if(root == NULL){
return 0;
}
int leftDepth = Depth(root->lchild);//求左子树深度
int rightDepth = Depth(root->rchild);//求右子树深度
return leftDepth > rightDepth ? leftDepth+1 : rightDepth+1;//返回深度更大的值加1
}
//求二叉树叶子节点个数
int LeafCount(BTNode *root){
if(root == NULL){
return 0;
}
if(root->lchild == NULL && root->rchild == NULL){//节点为叶子节点
return 1;
}
int leftCount = LeafCount(root->lchild);//递归计算左子树叶子节点数
int rightCount = LeafCount(root->rchild);//递归计算右子树叶子节点数
return leftCount + rightCount;//返回叶子节点数之和
}
int main(){
BTNode *root;
printf("请输入二叉树,用空格表示空节点:");
root = CreateBTree();
printf("先序遍历:");
PreOrder(root);
printf("\n中序遍历:");
InOrder(root);
printf("\n后序遍历:");
PostOrder(root);
printf("\n二叉树深度:%d", Depth(root));
printf("\n叶子节点个数:%d", LeafCount(root));
return 0;
}
阅读全文