C语言 -- 数据结构 --- 求二叉树的深度和叶子节点数

395 阅读1分钟

C语言 – 数据结构 — 求二叉树的深度和叶子节点数

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

typedef struct Tree
{
    int data;
    struct Tree *lchild;
    struct Tree *rchild;
}Tree, *BitTree;

BitTree CreateLink()
{
    int data;
    BitTree T;
    scanf("%d", &data);
    //  输入-1时,代表该节点不存在数据
    if (data == -1)
        return NULL;
    else
    {
        T = (BitTree)malloc(sizeof(Tree));
        T->data = data;
        printf("请输入%d的左子树: ", data);
        T->lchild = CreateLink();
        printf("请输入%d的右子树: ", data);
        T->rchild = CreateLink();
        return T;
    }
}

int Depth(BitTree B)
{
    if (B == NULL)
        return 0;
    int l, r;
    l = Depth(B->lchild);
    r = Depth(B->rchild);
    if (l < r)
        return r + 1;
    else
        return l + 1;
}

int NodeNum(BitTree B)
{
    if (B == NULL)
        return 0;
    if (B->lchild == NULL && B->rchild == NULL)
        return 1;
    return NodeNum(B->lchild) + NodeNum(B->rchild);
}

int main()
{
    BitTree B;
    int deep;
    printf("请输入二叉树的数据:\n");
    B = CreateLink();
    deep = Depth(B);
    int cnt;
    cnt = NodeNum(B);
    printf("二叉树的深度为 %d", deep);
    printf("\n二叉树的叶子结点: %d", cnt);
    return 0;
}