题目描述
计算一颗二叉树包含的叶子结点数量。
提示:叶子是指它的左右孩子为空。
建树方法采用“先序遍历+空树用0表示”的方法,即给定一颗二叉树的先序遍历的结果为AB0C00D00,其中空节点用字符‘0’表示。
输入
第一行输入一个整数t,表示有t个测试数据
第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行
输入样例:
3
AB0C00D00
AB00C00
ABC00D00E00
输出
逐行输出每个二叉树的包含的叶子数量
输出样例:
2
2
3
代码
#include <iostream>
using namespace std;struct Node{char data;Node *left;Node *right;
};class Tree{
public:Node *root;int leafNum=0;void create(Node *&t){char c;cin >> c;if(c == '0'){t = NULL;}else{t = new Node;t->data = c;create(t->left);create(t->right);}}void getLeaf(Node *t){if(t == NULL){return;}else{if(t->left == NULL && t->right == NULL){ //无左右孩子则为叶子结点leafNum++;}getLeaf(t->left);getLeaf(t->right);}}
};int main()
{int t;cin >> t;while(t--){Tree tree;tree.create(tree.root);tree.getLeaf(tree.root);cout << tree.leafNum << endl;}return 0;
}