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();
        }
    }
  • 相关阅读:
    05 单例模式
    04 volatile关键字实现原理
    03 synchronized
    02 java内存模型
    spark性能调优06-数据倾斜处理
    redis缓存架构-03-redis下的replication以及master+slave
    SpringBoot webSocket搭建示例
    Httpclient-(get、post(application/json)、post(application/form-data)、download、upload)
    CentOS-Java 依赖安装
    Git使用教程
  • 原文地址:https://www.cnblogs.com/Liu269393/p/10217295.html
Copyright © 2011-2022 走看看