7-1 求二叉树的叶子结点个数 (20分)
7-1 求二叉树的叶子结点个数 (20分)
以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数。
输入格式:
输入二叉树的先序序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
输出有两行:
第一行是二叉树的中序遍历序列;
第二行是二叉树的叶子结点个数。
输入样例:
ABC##DE#G##F###
输出样例:
CBEGDFA
3
【程序实现】
#include<bits/stdc++.h>
using namespace std;
struct tree{
char data;
struct tree *left;
struct tree *right;
};
char ch[10005];
int c = 0, i = 0;
struct tree *creat(){
char op = ch[i++];
if(op == '#') return NULL;
struct tree *root = new struct tree;
root->data = op;
root->left = creat();
root->right = creat();
if (!root->left && !root->right)
c++;
return root;
}
void InorderTraversal(struct tree *root){
if (root != NULL) {
InorderTraversal( root->left );
printf("%c",root->data);
InorderTraversal( root->right );
}
}
int main(){
scanf("%s",ch);
struct tree *root = creat();
InorderTraversal(root);
cout<<endl<<c;
return 0;
}

浙公网安备 33010602011771号