zoukankan      html  css  js  c++  java
  • 基础数据结构-二叉树-拓展:计算二叉树的左叶子数

    计算一颗二叉树包含的叶子结点数量。
    左叶子是指它的左右孩子为空,而且它是父亲的左孩子

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

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

    输入

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

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

    输出

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

    样例输入

    3
    AB0C00D00
    AB00C00
    ABCD0000EF000

    样例输出

    0
    1
    2

    #include<iostream> 
    #include<string> 
    using namespace std; 
    int sum=0; 
    class BiTreeNode{ 
    public: 
        char data; 
        BiTreeNode *LeftChild; 
        BiTreeNode *RightChild; 
        BiTreeNode():LeftChild(NULL),RightChild(NULL){} 
        ~BiTreeNode(){} 
    }; 
      
    class BiTree{ 
    private: 
        BiTreeNode *Root; 
        int pos; 
        string strTree; 
        BiTreeNode* CreateBiTree(); 
        void PreOrder(BiTreeNode* t); 
        void InOrder(BiTreeNode* t); 
        void PostOrder(BiTreeNode* t); 
    public: 
        BiTree(){}; 
        ~BiTree(){}; 
        void CreateTree(string TreeArray); 
        void PreOrder(); 
        void InOrder(); 
        void PostOrder(); 
    }; 
      
    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->LeftChild=CreateBiTree(); 
            T->RightChild=CreateBiTree(); 
        } 
        return T; 
    } 
      
    void BiTree::PreOrder() 
    { 
        PreOrder(Root); 
    } 
      
    void BiTree::PreOrder(BiTreeNode* t) 
    { 
        if(t) 
        { 
            if(t->LeftChild){ 
                PreOrder(t->LeftChild); 
            } 
            else if(!t->RightChild)  sum++; 
            if(t->RightChild&&t->RightChild->LeftChild) PreOrder(t->RightChild->LeftChild); 
        } 
    } 
      
    void BiTree::InOrder() 
    { 
        InOrder(Root); 
    } 
      
    void BiTree::InOrder(BiTreeNode* t) 
    { 
        if(t) 
        { 
            InOrder(t->LeftChild); 
            cout<<t->data; 
            InOrder(t->RightChild); 
        } 
    } 
      
    void BiTree::PostOrder() 
    { 
        PostOrder(Root); 
    } 
      
    void BiTree::PostOrder(BiTreeNode*t) 
    { 
        if(t) 
        { 
            PostOrder(t->LeftChild); 
            PostOrder(t->RightChild); 
            cout<<t->data; 
        } 
    } 
      
      
    int main() 
    { 
        int t; 
        string str; 
        BiTree BT; 
        BiTreeNode BTN; 
        cin>>t; 
        while(t--) 
        { 
            sum=0; 
            cin>>str; 
            BT.CreateTree(str); 
            BT.PreOrder(); 
            cout<<sum<<endl; 
        } 
        return 0; 
    }
  • 相关阅读:
    ABAP Help Document(2):1.2 表达式
    ABAP Help Document(1):1.1关键字
    api——》将.doc文件转成.docx文件后缀,且仅需要输入单个文件绝对路径
    python 更改默认输出 解决编码常出错问题
    爬取法律法规代码(可直接使用)
    python datetime 模块详解
    python 获得日期列表中最大日期(能够剔出不是日期类型)
    博客园页面css
    日期大小比较令解决{strftime('%Y年%m月%d日')}出错问题
    CodeForces
  • 原文地址:https://www.cnblogs.com/nathaneko/p/6491898.html
Copyright © 2011-2022 走看看