DS二叉树--叶子数量
Posted szu-ds-wys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DS二叉树--叶子数量相关的知识,希望对你有一定的参考价值。
题目描述
计算一颗二叉树包含的叶子结点数量。
提示:叶子是指它的左右孩子为空。
建树方法采用“先序遍历+空树用0表示”的方法,即给定一颗二叉树的先序遍历的结果为AB0C00D00,其中空节点用字符‘0’表示。则该树的逻辑结构如下图。
输入
第一行输入一个整数t,表示有t个测试数据
第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行
输出
逐行输出每个二叉树的包含的叶子数量
样例输入
3 AB0C00D00 AB00C00 ABC00D00E00
样例输出
2 2 3
提示
#include<iostream> #include<string> #include<queue> using namespace std; class BiTreeNode { public: char data; BiTreeNode *Left; BiTreeNode *Right; BiTreeNode() { Left=NULL; Right=NULL; } ~BiTreeNode() { delete Left; delete Right; } }; class BiTree { public: BiTreeNode *Root; int pos; string strTree; BiTree(string str) { pos=0; strTree=str; Root=CreateBiTree(); } BiTreeNode *CreateBiTree() { char ch=strTree[pos]; pos++; if(ch==‘0‘) { return NULL; } else { BiTreeNode *T; T=new BiTreeNode(); T->data=ch; T->Left=CreateBiTree(); T->Right=CreateBiTree(); return T; } } int countleaves() { int count=0; queue<BiTreeNode*>Q; if(Root==NULL) return 0; Q.push(Root); while(!Q.empty()) { int flag=0; BiTreeNode *temp=Q.front(); if(temp->Left!=NULL) { flag++; Q.push(temp->Left); } if(temp->Right!=NULL) { flag++; Q.push(temp->Right); } Q.pop(); if(flag==0) count++; } return count; } }; int main() { int T; cin>>T; while(T--) { string str; cin>>str; BiTree tree(str); cout<<tree.countleaves()<<endl; } return 0; }
以上是关于DS二叉树--叶子数量的主要内容,如果未能解决你的问题,请参考以下文章