# include<stdio.h>
# include<stdlib.h>
typedef char TElemType;//把二叉树的类型定义为字符型
typedef struct node
{
    TElemType data;
    struct node *lchild,*rchild;
}BiTNode,*BiTree;
void InitBiTree(BiTree *root)
{
    (*root)=NULL;
}
//递归的方法创建一棵二叉树
void Create(BiTree *root)
{
    TElemType x;
    scanf("%c",&x);
    getchar();
    if(x=='0') return ;
    else
    {
      (*root)=(BiTNode*)malloc(sizeof(BiTNode));
      (*root)->data=x;
      (*root)->lchild=(*root)->rchild=NULL;
      Create(&((*root)->lchild));
      Create(&((*root)->rchild));
    }
}
void PreOrder(BiTree root)//先序遍历二叉树,root为指向二叉树根结点
{
    if(root!=NULL)
    {
        printf("%c ",root->data);//访问根结点
        PreOrder(root->lchild);//先序遍历左子树
        PreOrder(root->rchild);//先序遍历右子树
    }
}
int OncechildNum(BiTree root)
{
    if(root==NULL)  return 0;
    else
        if(root->lchild==NULL&&root->rchild==NULL)
            return 0;
    else
        if(root->lchild==NULL||root->rchild==NULL)
        {
            if(root->lchild!=NULL&&root->rchild==NULL)
                return(OncechildNum(root->lchild)+1);
            if(root->lchild==NULL&&root->rchild!=NULL)
                return(OncechildNum(root->rchild)+1);
        }
        else
            return(OncechildNum(root->lchild))+OncechildNum(root->rchild);
}
void main()
{
    BiTree bt;
    printf("创建一个二叉树:");
    Create(&bt);
    printf("先序遍历该二叉树后的结果为:");二叉树公式
    PreOrder(bt);
    printf("\n");
    printf("该二叉树的单分支结点个数为:%d\n",OncechildNum(bt));
    printf("\n");
}