解题思路:
这道题要求通过给出的前序遍历二叉树的数据,构造二叉树,并求出其叶子节点的数目。
二叉树部分知识比较简单好理解,就是要注意二叉树的操作均需要递归完成。
其实我一般习惯是先给存储结构申请空间,用void函数对存储结构进行操作的,但是这个题在读取输入字符前无法确定是否需要申请空间,于是我选择在函数内申请空间。
具体操作见代码,代码中有部分注释。
题解代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct BinTreeNode{
char data;
struct BinTreeNode *left;
struct BinTreeNode *right;
}BinTreeNode;
BinTreeNode *CreatBinTree(){
char data;
BinTreeNode *p;
data = getchar();
if(data>='A'&&data<='Z'){
p = (BinTreeNode*)malloc(sizeof(BinTreeNode));
p->data = data;
p->left = CreatBinTree();
p->right = CreatBinTree();
return p;
}
else{
return NULL;
}
}
int GetLeafNum(BinTreeNode *T){
int nLeft=0,nRight=0;
if(T->left==NULL && T->right==NULL){
return 1;
}
if(T->left){
nLeft = GetLeafNum(T->left);
}
if(T->right){
nRight = GetLeafNum(T->right);
}
return nLeft+nRight;
}
int main(){
//其实我一般习惯是先给存储结构申请空间,用void函数对存储结构进行操作的,但是这个题在读取输入字符前无法确定是否需要申请空间,于是我选择在函数内申请空间
BinTreeNode *T;
T = CreatBinTree();
int num;
num = GetLeafNum(T);
printf("%d",num);
return 0;
}