c语言二叉树


```c
#include <stdio.h>

typedef char Datatype;
typedef struct Node
{
    Datatype data;
    struct Node  *lchild;
    struct Node  *rchild;
}BinTreeNode;

typedef BinTreeNode *BinTree;

void CreatBinTree(BinTree *T)//创建二叉树
{
    char ch;
    if((ch=getchar())==' ')
        *T = NULL;
    else{
        *T=(BinTreeNode *)malloc(sizeof(BinTreeNode));
        (*T)->data=ch;
        CreatBinTree(&(*T)->lchild);
        CreatBinTree(&(*T)->rchild);
    }
}

int GetLeaves(BinTree root)//求叶子节点总数
{
    static int leaf = 0;
    if(root)
    {
        if(!(root->lchild||root->rchild))
            leaf++;
        GetLeaves(root->lchild);
        GetLeaves(root->rchild);
    }
    return leaf;
}

int Depth(BinTree T)//递归求二叉树高度
{//对于非空二叉树,其深度等于某子树的深度加1
    int dep1=0,dep2=0;
    if(T==NULL) return 0;
    else
    {
        dep1 = Depth(T->lchild);
        dep2 = Depth(T->rchild);
        return (dep1>dep2?dep1:dep2)+1;
    }
}

void level(BinTree p)//BinTreeNode *p  层次遍历
{
    int front,rear;
    int Maxsize=50;
    BinTreeNode *que[Maxsize];
    front=rear=0;//定义循环队列
    BinTreeNode *q;
    if(p!=NULL)
    {
        rear=(rear+1)%Maxsize;
        que[rear]=p;//根节点入队
        while (front!=rear) {
            q=que[front];//队头节点出队(队头节点出队后,其子孩子节点入队,则输出为层次遍历)
            //visit(q);
            if(q->lchild!=NULL)
            {
                rear=(rear+1)%Maxsize;
                que[rear]=q->lchild;
            }
            if(q->rchild!=NULL)
            {
                rear=(rear+1)%Maxsize;
                que[rear]=q->rchild;
            }
        }
        
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值