#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max_size 100
typedef char ElemType;
typedef struct BiTNode {
ElemType data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
void preOrder(BiTree T) {
if (T != NULL) {
printf("%c", T->data);
preOrder(T->lchild);
preOrder(T->rchild);
}
}
void inOrder(BiTree T) {
if (T != NULL) {
inOrder(T->lchild);
printf("%c", T->data);
inOrder(T->rchild);
}
}
BiTree creatBiTree(ElemType* preOrderNode, int preFirstNode, int preLastNode, ElemType* inOrderNode, int inFirstNode, int inLastNode) {
if (preFirstNode > preLastNode) {
return NULL;
}
BiTNode* pnode = (BiTNode*)malloc(sizeof(BiTNode));
pnode->data = preOrderNode[preFirstNode];
pnode->lchild = pnode->rchild = NULL;
int index;
for (index = inFirstNode; index <= inLastNode; index++) {
if (inOrderNode[index] == pnode->data) {
break;
}
}
pnode->lchild = creatBiTree(preOrderNode, preFirstNode + 1, preFirstNode + index - inFirstNode, inOrderNode, inFirstNode, index - 1);
pnode->rchild = creatBiTree(preOrderNode, preFirstNode + index - inFirstNode + 1, preLastNode, inOrderNode, index + 1, inLastNode);
return pnode;
}
int getnum0(BiTree T) {
if (T == NULL) {
return 0;
}
else if (T->lchild == NULL && T->rchild == NULL) {
return 1;
}
else {
return getnum0(T->lchild) + getnum0(T->rchild);
}
}
int getnum1(BiTree T) {
if (T == NULL) {
return 0;
}
else if (T->lchild != NULL && T->rchild == NULL) {
return 1 + getnum1(T->lchild);
}
else if (T->rchild != NULL && T->lchild == NULL) {
return 1 + getnum1(T->rchild);
}
else {
return getnum1(T->lchild) + getnum1(T->rchild);
}
}
int getnum2(BiTree T) {
if (T == NULL) {
return 0;
}
else if (T->lchild != NULL && T->rchild != NULL) {
return 1 + getnum2(T->lchild) + getnum2(T->rchild);
}
else {
return getnum2(T->lchild) + getnum2(T->rchild);
}
}
int gethigh(BiTree T) {
if (T == NULL) {
return 0;
}
else {
int lefthigh = gethigh(T->lchild);
int righthigh = gethigh(T->rchild);
return lefthigh > righthigh ? lefthigh + 1 : righthigh + 1;
}
}
int main() {
ElemType preOrderNode[max_size] = { 0 };
ElemType inOrderNode[max_size] = { 0 };
int preOrderLength = 0;
int inOrderLength = 0;
gets_s(preOrderNode);
gets_s(inOrderNode);
preOrderLength = strlen(preOrderNode);
inOrderLength = strlen(inOrderNode);
BiTree T = creatBiTree(preOrderNode, 0, preOrderLength - 1, inOrderNode, 0, inOrderLength - 1);
int num0 = getnum0(T);
int num1 = getnum1(T);
int num2 = getnum2(T);
int high = gethigh(T);
printf("树中度为0的节点数:%d\n", num0);
printf("树中度为1的节点数:%d\n", num1);
printf("树中度为2的节点数:%d\n", num2);
printf("树的高度为:%d\n", high);
preOrder(T);
printf("\n");
inOrder(T);
printf("\n");
/*leverOrder(T);
printf("\n");*/
return 0;
}
计算二叉树度为0的结点、度为1的结点、度为2的结点、树的高度
于 2023-04-17 22:57:19 首次发布