• 【数据结构上机练习】考试题目 3


    代码:

    #include <iostream>
    #include<stack>
    #include<queue>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    
    typedef struct  Node{
        char data;
        int le;
        Node * left,*right;
        Node(){le=0;}
    }BinTreeNode;
    
    class BinTree{
    private:
        BinTreeNode *root;
        int maxle;
    public:
        BinTree(){
            cout<<"输入要创建的树,空节点用#代替\n";
            root = creat();
            root->le=0;
            maxle=0;
    }
        BinTree(BinTreeNode & temp){
            root = &temp;
            temp.left = NULL;
            temp.right = NULL;
        }
        BinTreeNode * getRoot(){
            return root;
        }
        BinTreeNode * creat(){ //递归创建树
            char t;
            cin>>t;
            if(t=='#'){// #  stand for null
                return NULL;
            }
            else{
                BinTreeNode *r = new BinTreeNode;
                r->data = t;
                r->left = creat();
                r->right = creat();
                return r;
            }
        }
        void dfs(BinTreeNode *x){
            if(x){
                if(maxle<x->le) maxle=x->le;
                if(x->left)x->left->le=x->le+1;
            if(x->right)x->right->le=x->le+1;
            dfs(x->left);dfs(x->right);
            }
        }
        void dfs(){dfs(root);}
        void dfs2(int *k,BinTreeNode *x)
        {
            if(x){
            if(x->left==0&&x->right==0)k[x->le]++;
            dfs2(k,x->left);
            dfs2(k,x->right);
            }
        }
    
        void leaf()
        {
            dfs();
            int num[100]={};
            dfs2(num,root);
            for(int i=0;i<=maxle;++i)
                printf("第%d层包含%d个叶结点.\n",i,num[i]);
        }
    
    };
    
    int main(){
    
        // 测试数据 (教材87页图)   *+A##B##+*-C##D##E##F##
    
    
    
            BinTree mb;
            //BinTreeNode *r = mb.getRoot();
            mb.leaf();
    
        return 0;
    }

    运行结果:

    转载文章请注明出处: http://www.cnblogs.com/menglei/
  • 相关阅读:
    Neo4j-3.0.3 (Debian 8)
    python学习之argparse模块
    变异系数
    孪生素数
    统计学中的自由度
    兰伯特余弦定理(Lambert)
    椒盐噪声
    沥青路面磨损后泛白的原因
    朗伯体
    绕坐标轴旋转的矩阵
  • 原文地址:https://www.cnblogs.com/menglei/p/2810911.html
Copyright © 2020-2023  润新知