二叉树最简单构成

 
#include <stdio.h>

//二叉树链表结构
typedef struct Node{
    char data;
    struct Node * LChild;
    struct Node * RChild;
}BiTNode, *BiTree;

//创建二叉树链表
void CreateBiTree(BiTree *bt){
    char ch;
    ch = getchar();
    if(ch == '.') *bt = NULL;
    else{
        *bt = (BiTree)malloc(sizeof(BiTNode));
        (*bt) -> data = ch;
        CreateBiTree(&((*bt)-> LChild));
        CreateBiTree(&((*bt)-> RChild));
    }
}

//先序遍历输出二叉树
void PreOrder(BiTree root){
    if(root != NULL){
        printf("%c ",root -> data);
        PreOrder(root -> LChild);
        PreOrder(root -> RChild);
    }
}
//中序遍历输出二叉树
void  InOrder(BiTree root)
{
    if (root != NULL){
        InOrder(root -> LChild);
        printf("%c ",root -> data);
        InOrder(root -> RChild);
    }
}
//后序遍历输出二叉树
void  PostOrder(BiTree root)
{
    if(root != NULL){
        PostOrder(root -> LChild);
        PostOrder(root -> RChild);
        printf("%c ",root -> data);
    }
}
//叶子结点
void YPreOrder(BiTree root){
    if(root != NULL){
        if(root -> LChild == NULL && root -> RChild == NULL) printf("%c",root -> data);
        PreOrder(root -> LChild);
        PreOrder(root -> RChild);
    }
}
//统计叶子节点数目
int leaf(BiTree root){
    int LeafCount;
    if(root == NULL) LeafCount = 0;
    else if ((root -> LChild == NULL)&&(root -> RChild == NULL)) LeafCount =1;
    else
        LeafCount = leaf(root -> LChild) + leaf(root -> RChild);
    return LeafCount;
}
//遍历求二叉树高度
int PostTreeDepth(BiTree bt){
    int hl,hr,max;
    if(bt != NULL){
        hl = PostTreeDepth(bt -> LChild);
        hr = PostTreeDepth(bt -> RChild);
        max = hl>hr?hl:hr;
        return(max + 1);
    }
    else return (0);
}
int main()
{
    BiTree tree;
    CreateBiTree(&tree);
    printf("\n\n先序遍历二叉树结点:\n\n");
    PreOrder(tree);
    printf("\n\n中序遍历二叉树结点:\n\n");
    InOrder(tree);
    printf("\n\n后序遍历二叉树结点:\n\n");
    PostOrder(tree);
    printf("\n\n先序遍历二叉树叶子结点:\n\n");
    YPreOrder(tree);
    printf("\n\n叶子节点的数目为:\n\n%d",leaf(tree));
    printf("\n\n叶子节点的高度为:\n\n%d",PostTreeDepth(tree));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值