题目简述:
解析:
首先建立二叉树。将输入的字符串建立成二叉树。然后遍历子树,遇到一个节点就判断它左右子树是不是都为空,若不是则分别递归判断它左右子树。
重点:
其实没有什么难点,掌握以下知识:
(1)各种输入情况下,二叉树的创建;
(2)二叉树的先序中序后序遍历;
(3)注意左右子树均为空时判断它是叶子节点,反之,分别判断左右子树,有时候只有一个子树,所以两棵子树要分别判断;
代码:
#include <iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
typedef struct Node{
char val;
Node *left,*right;
}Node,*BiTree;
int num=0;
BiTree Create_BiTree()
{
char ch=getchar();
if(ch=='#')
return NULL;
BiTree node;
node=(Node *)malloc(sizeof(Node));
node->val=ch;
node->left=Create_BiTree();
node->right=Create_BiTree();
return node;
}
void Calcu_Num(BiTree node)
{
if(node->left==NULL&&node->right==NULL)
num++;
else
{
if(node->left)
Calcu_Num(node->left);
if(node->right)
Calcu_Num(node->right);
}
}
void MidOrder_Traverse(BiTree node)
{
if(node->left)
MidOrder_Traverse(node->left);
cout<<node->val;
if(node->right)
MidOrder_Traverse(node->right);
//ABD##EH###CF#I##G##
}
int main()
{
BiTree root;
root=(Node *)malloc(sizeof(Node));
root=Create_BiTree();
//MidOrder_Traverse(root);
Calcu_Num(root);
cout<<num<<endl;
return 0;
}