计算二叉树的深度和叶子数(递归)

#include <stdio.h>
#include <stdlib.h>

typedef char DataType;
typedef struct Node{
    DataType data;
    struct Node *lchild,*rchild;
    
} TreeNode,*BinTree;

//创建二叉树
createTree(BinTree *t){ 
    char c;
    scanf("%c",&c); 
    if(c=='.'){
        *t = NULL;
    }else{
        *t = (TreeNode*)malloc(sizeof(TreeNode));
        (*t)->data = c;
        
        createTree(&(*t)->lchild);
        createTree(&(*t)->rchild);
    }
}
//计算深度

int treeDepth(BinTree *t){
    
    int deep = 0 ;
    int left = 0;
    int right = 0;
    
    if(*t== NULL){
        return deep;
    }
    left = treeDepth(&(*t)->lchild);
    right = treeDepth(&(*t)->rchild);
    
    deep = right>left?right:left;
    deep++;
    return deep;
}

//计算叶子结点个数
int TreeLeaf(BinTree *t){
    static int num=0;
    
    if(*t== NULL){
        return num;
    }   
    if((*t)->lchild==NULL&& (*t)->rchild==NULL){    
        num++;
    }
    TreeLeaf(&(*t)->lchild);
    TreeLeaf(&(*t)->rchild);

    return num;
}

void main(){
    int deep=0;
    int leaf =0;
    BinTree t = NULL;
    createTree(&t); 

    deep = treeDepth(&t);
    printf("树的深度:%d\n",deep);

    leaf = TreeLeaf(&t);
    printf("树的叶子结点个数:%d\n",leaf);
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容