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

    题目描述

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

    左叶子是指它的左右孩子为空,而且它是父亲的左孩子

    提示:可以用三叉链表法,也可以用现有算法对两层结点进行判断

    建树方法采用“先序遍历+空树用0表示”的方法

    输入

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

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

    输出

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

    样例输入

    3
    AB0C00D00
    AB00C00
    ABCD0000EF000

    样例输出

    0
    1
    2
     
    这里的关键判断是
    #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)
            {
                if (!t->left->left && !t->left->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();
        }
    }
  • 相关阅读:
    Mvc form提交
    FlexiGrid 使用 全选、自动绑定
    Mysql Insert Or Update语法例子
    orderby与groupby同时使用
    SQLSTATE[HY000] [2002] No such file or directory in
    swoole安装
    关于商城分类查询表结构与数据查询
    查询数据库每张表的信息
    php 正则验证
    PHP代码优化
  • 原文地址:https://www.cnblogs.com/Liu269393/p/10217295.html
Copyright © 2011-2022 走看看