美文网首页
基于二叉链表的二叉树结点个数的统计

基于二叉链表的二叉树结点个数的统计

作者: 点一下我的id | 来源:发表于2018-12-20 01:48 被阅读0次
    #include<iostream>
    #include<string>
    using namespace std;
    typedef char TElemType;
    #define OK 1
    typedef int Status;
    typedef struct BiNode
    {
        TElemType data;
        struct BiNode *lchild,*rchild;
    }BiNode,*BiTree;
    int len;
    string ch;
    void CreateBiTree(BiTree &T)
    {
        
        //if(a.length()==b)return;
        char c=ch.at(len++);
        if(c=='0')
        {
            T=NULL;
        } 
        else
        {
            T=new BiNode;
            T->data=c;
            CreateBiTree(T->lchild);
            CreateBiTree(T->rchild);
        }
    }
    Status PreOrderTraverse(BiTree T){
      if(T==NULL) return OK; 
      else{    
         cout<<T->data; 
         PreOrderTraverse(T->lchild); 
         PreOrderTraverse(T->rchild); 
        }
    }
    Status InOrderTraverse(BiTree T){
      if(T==NULL) return OK; 
      else{    
         InOrderTraverse(T->lchild); 
         cout<<T->data;
         InOrderTraverse(T->rchild); 
        }
    }
    Status PostOrderTraverse(BiTree T){
      if(T==NULL) return OK; 
      else{    
         PostOrderTraverse(T->lchild); 
         PostOrderTraverse(T->rchild); 
         cout<<T->data;
        }
    }
    int LeadCount(BiTree T){
        if(T==NULL)     //如果是空树返回0
            return 0;
        if (T->lchild == NULL && T->rchild == NULL)
            return 1; //如果是叶子结点返回1
        else return LeadCount(T->lchild) + LeadCount(T->rchild);
    }
    int doubleCount(BiTree T){
        //叶子节点n0=二度节点n2+1
        return LeadCount(T)-1;
    }
    int NodeCount(BiTree T){
      if(T == NULL ) return 0;                
      else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
    } 
    int oneCount(BiTree T){
        return NodeCount(T)-doubleCount(T)-LeadCount(T);
    }
    int main()
    {
        int count=0;
        while(cin>>ch&&ch!="0")
        {
            BiTree T;
            len=0;
            CreateBiTree(T);
            cout<<LeadCount(T)<<" "<<oneCount(T)<<" "<<doubleCount(T)<<endl;
        }
    
    }
    

    基于二叉链表的二叉树结点个数的统计
    发布时间: 2017年9月18日 10:26 最后更新: 2017年9月18日 11:47 时间限制: 1000ms 内存限制: 128M

    描述
    设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法对二叉树的结点(度为0、1、2)个数进行统计。

    输入
    多组数据。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。

    输出
    每组数据输出一行,每行三个数分别为二叉树的度为0、1、2的结点个数。每两个数用空格分隔。

    样例输入1
    abcd00e00f00ig00h00
    abd00e00cf00g00
    0
    样例输出1
    5 0 4
    4 0 3

    相关文章

      网友评论

          本文标题:基于二叉链表的二叉树结点个数的统计

          本文链接:https://www.haomeiwen.com/subject/rmlekqtx.html