• 【二叉树】数据结构实验之二叉树的建立与遍历 2136


    写这篇主要因为这题概括了我现在学到的二叉树的大部分知识点,所以每一个都用函数标识了。

    题目:数据结构实验之二叉树的建立与遍历

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define max(a, b) ((a > b) ? (a) : (b))
    char a[55];
    int i;
    struct tree
    {
        int data;
        struct tree *ltree, *rtree;//建立左子树和右子树,这个完全看个人喜好。男左女右都可以
    };
    
    struct tree *creat()//建树
    {
        struct tree *root;
        if(a[i] == ',')
        {
            i++;
            return NULL;
        }
        else
        {
            root = (struct tree *)malloc(sizeof(struct tree));
            root->data = a[i++];
            root->ltree = creat();
            root->rtree = creat();
        }
        return root;
    }
    
    void print_mid(struct tree *root)//中序输出
    {
        if(root == NULL)
            return;
        else
        {
            print_mid(root->ltree);
            printf("%c", root->data);
            print_mid(root->rtree);
        }
    }
    
    void print_later(struct tree *root)//后序输出
    {
        if(root == NULL)
            return;
        else
        {
            print_later(root->ltree);
            print_later(root->rtree);
            printf("%c", root->data);
        }
    }
    
    int leaves(struct tree *root)//数叶子数
    {
        if(root == NULL)
            return 0;
        else if(root->ltree == NULL && root->rtree == NULL)
            return 1;
        else
            return leaves(root->ltree) + leaves(root->rtree);
    }
    
    int depth_tree(struct tree *root)//计算树的深度
    {
        int depth = 0;
        if(root)
        {
            int ldepth = depth_tree(root->ltree);
            int rdepth = depth_tree(root->rtree);
            depth = max(ldepth+1, rdepth+1);
        }
        return depth;
    }
    
    
    void print_Sequence(struct tree *root)//树的层序遍历
    {
        struct tree *flag[55];
        int head = 0, tail = 0;
        flag[tail++] = root;
        while(head < tail)
        {
            if(flag[head])
            {
                printf("%c", flag[head]->data);
                flag[tail++] = flag[head]->ltree;
                flag[tail++] = flag[head]->rtree;
            }
            head++;
        }
    }
    
    int main()
    {
        scanf("%s", a);
        i = 0;
        struct tree *root;
        root = (struct tree *)malloc(sizeof(struct tree));
        root = creat();
        print_mid(root);//中序输出
        printf("
    ");
        print_later(root);//后序输出
        printf("
    ");
        print_Sequence(root);//树的层序遍历
        printf("%d
    ", leaves(root));//叶子的数量
        printf("%d
    ", depth_tree(root));//树的深度
        return 0;
    }
    
  • 相关阅读:
    【20111012】数据库因机器名被修改无法成功发布问题
    SQL Server 2008 r2 bpa 安装
    A faster DBCC CHECKDB? By Ian Stirk, 2011/08/23
    SQL Server 2005 性能故障白皮书
    Best Practices Analyzer Tool for Microsoft SQL Server 2000
    top详细使用说明
    SQLIO测试 SAN
    数据库事务发布性能调整
    查询优化建议
    证书配置数据库镜像 demo from msdn
  • 原文地址:https://www.cnblogs.com/zyysyang/p/11093506.html
Copyright © 2020-2023  润新知