• 基础数据结构-二叉树-拓展:计算二叉树的左叶子数


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

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

    建树方法采用“先序遍历+空树用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; 
    }
  • 相关阅读:
    跟我一起在Win10中用VMware安装Ubuntu
    跟我一起安装vmware
    关于vue项目报错:this relative module was not found
    【error】vue-style-loader didn't discriminate between server and client
    [Vue warn]: Error in beforeCreate hook: "Error: Cannot find module './index.vue?vue&type=style&index=0&lang=scss&'"
    JavaScript数据可视化编程书籍上面的例子(flotr2)
    ExecuteNonQuery和ExecuteScalar的区别
    Datatable添加数据,提示该行已经属于另一个表的解决方法
    利用反射动态调用类成员
    c#用picturebox显示多页TIF
  • 原文地址:https://www.cnblogs.com/nathaneko/p/6491898.html
Copyright © 2020-2023  润新知