6-4 二叉树求深度和叶子数

来源:互联网 发布:婚纱照相册制作软件 编辑:程序博客网 时间:2024/05/17 04:57

编写函数计算二叉树的深度以及叶子节点数。二叉树采用二叉链表存储结构
函数接口定义:

int GetDepthOfBiTree ( BiTree T);int LeafCount(BiTree T);

其中 T是用户传入的参数,表示二叉树根节点的地址。函数须返回二叉树的深度(也称为高度)。
裁判测试程序样例:

//头文件包含#include<stdlib.h>#include<stdio.h>#include<malloc.h>//函数状态码定义#define TRUE       1#define FALSE      0#define OK         1#define ERROR      0#define OVERFLOW   -1#define INFEASIBLE -2#define NULL  0typedef int Status;//二叉链表存储结构定义typedef int TElemType;typedef struct BiTNode{    TElemType data;    struct BiTNode  *lchild, *rchild; } BiTNode, *BiTree;//先序创建二叉树各结点Status CreateBiTree(BiTree &T){   TElemType e;   scanf("%d",&e);   if(e==0)T=NULL;   else{     T=(BiTree)malloc(sizeof(BiTNode));     if(!T)exit(OVERFLOW);     T->data=e;     CreateBiTree(T->lchild);     CreateBiTree(T->rchild);   }   return OK;  }//下面是需要实现的函数的声明int GetDepthOfBiTree ( BiTree T);int LeafCount(BiTree T);//下面是主函数int main(){   BiTree T;   int depth, numberOfLeaves;   CreateBiTree(T);   depth= GetDepthOfBiTree(T);     numberOfLeaves=LeafCount(T);   printf("%d %d\n",depth,numberOfLeaves);}/* 请在这里填写答案 */

输入样例:

1 3 0 0 5 7 0 0 0

输出样例:

3 2

代码:

int GetDepthOfBiTree ( BiTree T) {    if(T == NULL ) {        return 0;    }    else {        int lenl = GetDepthOfBiTree(T->lchild);        int lenr = GetDepthOfBiTree(T->rchild);        return lenl > lenr? lenl+1:lenr+1;    }}int LeafCount(BiTree T) {    if(T == NULL) return 0;    else if(T->lchild == NULL && T->rchild == NULL) return 1;    else {        return LeafCount(T->lchild) + LeafCount(T->rchild);    }}
阅读全文
0 0
原创粉丝点击