zoukankan      html  css  js  c++  java
  • DS二叉树--叶子数量

    题目描述

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

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

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

    输入

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

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

    输出

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

    样例输入

    3
    AB0C00D00
    AB00C00
    ABC00D00E00

    样例输出

    2
    2
    3

    这里只要修改一下任意一个遍历函数即可,将输出改为判断当前节点是否为叶子节点

    #include<iostream>
    #include<string>
    using namespace std;
    class BitreeNode 
    {
    public:
        char data;
        BitreeNode *left;
        BitreeNode *right;
        BitreeNode():left(NULL),right(NULL){}
        ~BitreeNode(){}
    };
    class Bitree
    {
    private:
        BitreeNode *Root;
        int pos,count;
        string strtree;
        BitreeNode *CreateBitree();
        void countleaves(BitreeNode *t);
    public:
        Bitree() { count = 0; };
        ~Bitree() {};
        void CreateTree(string TreeArray);
        void countleaves();
    };
    void Bitree::CreateTree(string treearray)
    {
        pos = 0;
        strtree.assign(treearray);
        Root = CreateBitree();
    }
    BitreeNode *Bitree::CreateBitree()
    {
        BitreeNode *T;
        char ch;
        ch = strtree[pos++];
        if (ch == '0')
            T = NULL;
        else
        {
            T = new BitreeNode();
            T->data = ch;
            T->left = CreateBitree();
            T->right = CreateBitree();
        }
        return T;
    }
    void Bitree::countleaves()
    {
        countleaves(Root);
        cout << count << endl;
    }
    void Bitree::countleaves(BitreeNode *t)
    {
        if (t)
        {
            if (!t->left && !t->right)
                count++;
            countleaves(t->left);
            countleaves(t->right);
        }
    }
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            string str;
            cin >> str;
            Bitree *tree;
            tree = new Bitree();
            tree->CreateTree(str);
            tree->countleaves();
        }
    }
  • 相关阅读:
    XSD限定/Facets
    XSD元素替换(Element Substitution)
    XSD指示器
    乔布斯29年前的预言
    三年程序员生涯的感悟、总结和憧憬
    用Jetty快速开发J2EE应用
    Cygwin安装
    Maven依赖继承的写法
    Struts2自定义日期转换器
    Struts2三种数据转移方式
  • 原文地址:https://www.cnblogs.com/Liu269393/p/10217241.html
Copyright © 2011-2022 走看看