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;
}
posted @ 2020-04-15 14:49  clienter  阅读(263)  评论(0)    收藏  举报