DS二叉树--叶子数量

Posted szu-ds-wys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DS二叉树--叶子数量相关的知识,希望对你有一定的参考价值。

题目描述

 

计算一颗二叉树包含的叶子结点数量。

提示:叶子是指它的左右孩子为空。

建树方法采用“先序遍历+空树用0表示”的方法,即给定一颗二叉树的先序遍历的结果为AB0C00D00,其中空节点用字符‘0’表示。则该树的逻辑结构如下图。

 

 

 

输入

第一行输入一个整数t,表示有t个测试数据

第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行

 

 

输出

逐行输出每个二叉树的包含的叶子数量

样例输入

3 AB0C00D00 AB00C00 ABC00D00E00

样例输出

2 2 3

提示

 

 
#include<iostream>
#include<string>
#include<queue>
using namespace std;
class BiTreeNode
{
public:
    char data;
    BiTreeNode *Left;
    BiTreeNode *Right;
    BiTreeNode()
    {
        Left=NULL;
        Right=NULL;
    }
    ~BiTreeNode()
    {
        delete Left;
        delete Right;
    }
};
  
class BiTree
{
public:
    BiTreeNode *Root;
    int pos;
    string strTree;
    BiTree(string str)
    {
        pos=0;
        strTree=str;
        Root=CreateBiTree();
    }
    BiTreeNode *CreateBiTree()
    {
        char ch=strTree[pos];
        pos++;
        if(ch==0)
        {
            return NULL;
        }
        else
        {
            BiTreeNode *T;
            T=new BiTreeNode();
            T->data=ch;
            T->Left=CreateBiTree();
            T->Right=CreateBiTree();
            return T;
        }
    }
    int countleaves()
    {
        int count=0;
        queue<BiTreeNode*>Q;
        if(Root==NULL)
            return 0;
        Q.push(Root);
        while(!Q.empty())
        {
            int flag=0;
            BiTreeNode *temp=Q.front();
            if(temp->Left!=NULL)
            {
                flag++;
                Q.push(temp->Left);
            }
            if(temp->Right!=NULL)
            {
                flag++;
                Q.push(temp->Right);
            }
            Q.pop();
            if(flag==0)
                count++;
        }
        return count;
    }
};
  
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        string str;
        cin>>str;
        BiTree tree(str);
        cout<<tree.countleaves()<<endl;
    }
    return 0;
}

 

以上是关于DS二叉树--叶子数量的主要内容,如果未能解决你的问题,请参考以下文章

DS二叉树--二叉树之父子结点

DS二叉树——二叉树之父子结点

DS森林叶子编码

DS森林叶子编码

DS树--二叉树之最大路径

DS树--带权路径和