7-1 统计二叉树中具有度为1的结点数目

根据带虚结点的先序序列建立二叉树,再统计输出二叉树中具有度为1的结点数目。

输入格式:

测试数据有多组,处理到文件尾。每组测试数据在一行中输入一个字符串(不含空格且长度不超过80),表示二叉树的先序遍历序列,其中字符*表示虚结点(对应的子树为空)。

输出格式:

对于每组测试,对所建立的二叉树,输出该二叉树中具有度为1的结点数目。输出格式为:“num: d”,其中d为二叉树中具有度为1的结点数目。

输入样例:

HDA**C*B**GF*E***
A*B*C*D*E*F**

输出样例:

num: 3
num: 5

代码

#include
using namespace std;
#define OK 1

typedef char TElemType;
typedef int Status;
int i=0;
typedef struct BiTNode

{
    TElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

Status CreatBiTree(BiTree &T,string s)//字符串作为形参初始化二叉树
{


//cout<<"到了"<data=s[i];//给结点赋值
        i++;
        CreatBiTree(T->lchild,s);//递归初始化
        CreatBiTree(T->rchild,s);//递归初始化
        return OK;
    }



}
Status DestroyBiTree(BiTree &T)
{
    if(!T)
        return OK;
    DestroyBiTree(T->lchild);
    DestroyBiTree(T->rchild);
    free(T);
}
int GetNumber(BiTree T)//求度数为1的结点
{
    if(!T)//空的时候就返回0
        return 0;

//cout<<"调用了"<lchild&&T->rchild)||(T->lchild&&!T->rchild))
        return 1+GetNumber(T->lchild)+GetNumber(T->rchild);
        else
            return GetNumber(T->lchild)+GetNumber(T->rchild);

}

int main()
{
   string s;
   BiTree B;
  while(cin>>s)
  {


       i=0;
       if(CreatBiTree(B,s)==OK)
       {

       int n=GetNumber(B);
       cout<<"num: "<

你可能感兴趣的:(数据结构复习,数据结构)