计算一颗二叉树包含的叶子结点数量。
提示:叶子是指它的左右孩子为空。
建树方法采用“先序遍历+空树用0表示”的方法,即给定一颗二叉树的先序遍历的结果为AB0C00D00,其中空节点用字符‘0’表示。则该树的逻辑结构如下图。
标签:name ++ clu == null node 左右 tle queue
计算一颗二叉树包含的叶子结点数量。
提示:叶子是指它的左右孩子为空。
建树方法采用“先序遍历+空树用0表示”的方法,即给定一颗二叉树的先序遍历的结果为AB0C00D00,其中空节点用字符‘0’表示。则该树的逻辑结构如下图。
第一行输入一个整数t,表示有t个测试数据
第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行
逐行输出每个二叉树的包含的叶子数量
#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; }
标签:name ++ clu == null node 左右 tle queue
原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12180794.html