实验6-2 基于二叉链表存储结构实现二叉树的基本操作

发布于:2024-12-20 ⋅ 阅读:(13) ⋅ 点赞:(0)

题目:计算二叉树中的叶子结点个数

(1)如果二叉树为空,则叶子结点个数为0。

(2)如果二叉树只有根节点,则叶子结点个数为1

(3)左子树叶子结点数+右子树叶子结点数

一、原代码

#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef char TElemType; //TElemType 为可定义的数据类型,此设为char类型
//二叉树的二叉链表存储表示
typedef struct BiTNode
{				
	TElemType data;				    //结点数据域
	struct BiTNode *lchild,*rchild;	//左右孩子指针
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T);
void Copy(BiTree T, BiTree *NewT);
void PreOrderTraverse(BiTree T);
Status BiTreeEmpty(BiTree T);
Status Depth(BiTree T);
Status NodeCount(BiTree T);
Status LeafCount(BiTree T);
// 给出上述函数原型的定义
int main()
{
	BiTree tree,new_tree;
	CreateBiTree(&tree);
    if (!BiTreeEmpty(tree))
    {
        printf("该树为空树!\n");
        exit(ERROR);
    }
	else
	    printf("该树为非空树!\n");
	Copy(tree,&new_tree);
	printf("复制得到的新树的先序序列:\n");
	PreOrderTraverse(new_tree);
	printf("\n");
	printf("新树的深度为:%d\n",Depth(new_tree));
	printf("新树的结点个数为:%d\n",NodeCount(new_tree));
	printf("新树的叶子结点个数为:%d\n",LeafCount(new_tree));
    return ERROR;
}

二、七个函数的代码

void CreateBiTree(BiTree *T) { // 创建二叉树
    char ch;
    scanf("%c", &ch);
    if (ch == '#') {
        *T = NULL;
    } else {
        *T = (BiTree)malloc(sizeof(BiTNode));
        if (!*T) exit(OVERFLOW);
        (*T)->data = ch;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }
}
void Copy(BiTree T, BiTree *NewT) { /