#include "stdio.h"
#include "stdlib.h"
typedef char Elem;
typedef struct Node{
struct Node *lchild;
struct Node *rchild;
Elem data;
}BiTree;
void createBiTree (BiTree **bt) {
Elem input;
scanf("%c",&input);
if (input == '#') {
*bt = NULL;
return;
}else {
*bt = (BiTree *)malloc(sizeof(BiTree));
(*bt)->data = input;
createBiTree (&((*bt)->lchild));
createBiTree (&((*bt)->rchild));
}
}
void output (BiTree *bt) {
if (bt != NULL) {
printf("%c ",bt->data);
output (bt->lchild);
output (bt->rchild);
}
}
//二叉树的高度
int height (BiTree *bt) {
int lheight;
int rheight;
int max;
if (bt == NULL) {
return 0;
}else if (bt->lchild == NULL && bt->rchild == NULL) {
return 1;
}else {
lheight = height (bt->lchild);
rheight = height (bt->rchild);
max = lheight > rheight?lheight:rheight;
return (max + 1);
}
}
//二叉树的叶子节点的个数
int leafNodes (BiTree *bt) {
if (bt == NULL) {
return 0;
}else if (bt->lchild == NULL && bt->rchild == NULL) {
return 1;
}else {
return (leafNodes (bt->lchild) + (leafNodes (bt->rchild)));
}
}
//二叉树的节点的个数
int nodes (BiTree *bt) {
int num1;
int num2;
if (bt == NULL) {
return 0;
}else if (bt->lchild == NULL && bt->rchild == NULL) {
return 1;
}else {
num1 = nodes (bt->lchild);
num2 = nodes (bt->rchild);
return num1 + num2 + 1;
}
}
void main () {
BiTree *tree;
createBiTree (&tree);
output(tree);
printf("二叉树的高度:%d\n",height (tree));
printf("二叉树的节点数:%d\n",nodes (tree));
printf("二叉树的叶子节点的个数:%d\n", leafNodes (tree));
return;
}
二叉树的节点数和二叉树的叶子节点书和二叉树的深度
最新推荐文章于 2022-12-18 16:04:39 发布