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

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

作者: 点一下我的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

相关文章

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

    基于二叉链表的二叉树结点个数的统计发布时间: 2017年9月18日 10:26 最后更新: 2017年9月18...

  • 剑指offer刷题结果

    重建二叉树 链表中倒数第k个结点 最小的k个数 O(n) , 基于快排思想,但是会修改原数组 O(nlogk),堆...

  • 二叉树

    链表详解 用链表概念辅助理解二叉树,链表一个结点的后区指向下一个链表结点,前区指向上一个链表结点,线性结构。二叉树...

  • 数据结构题目37:求该二叉树中叶结点的数目

    题目:已知二叉树采用二叉链表存储结构,根结点所在链结点的地址为T,写一递归算法,求该二叉树中叶结点的数目。 具体算...

  • LeetCode:完全二叉树节点个数

    222. 完全二叉树的节点个数 思路: 如果是完全二叉树,则其结点的个数为 2^h-1;h为二叉树高度。对根结点来...

  • 数据结构题目52:二叉树的线索化

    题目:二叉树的线索化对二叉树的线索化,就是把二叉树的二叉链表存储结构中结点的所有空指针域改造成指向某结点在某种遍历...

  • 小朋友学数据结构(3):二叉树的建立和遍历

    一、基本概念 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树。根结点:最顶部的那个结点叫做根结点,根结点是所...

  • LeetCode-114-二叉树展开为链表

    二叉树展开为链表 题目描述:给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 ...

  • 数据结构题目38:求二叉树的深度

    题目:已知二叉树采用二叉链表存储结构,根结点所在链结点的地址为T,写一递归算法,求该二叉树的深度。 (一)递归算法...

  • 数据结构-线索二叉树

    定义 以上述结点结构构成的二叉链表作为二叉树的存储结构,叫做线索链表,其中指向结点前驱和后继的指针,叫做线索。加上...

网友评论

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

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