请问计算叶子节点哪里出错了..
程序代码:
#include<malloc.h> #include<stdio.h> #include<stdlib.h> #include<math.h> typedef char DataType; typedef struct node{ DataType data; struct node *lchild,*rchild; }BiTNode; typedef BiTNode *BiTree; void CreateBiTree(BiTree &T){ char ch;ch=getchar(); if(ch==' ') T=NULL; else{ T=(BiTNode*)malloc(sizeof(BiTNode)); T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } } void visit(char e){ if(e!=NULL) // 以整型格式输出 printf("%c ",e); } int PreOrderTraverse(BiTree T,void(*Visit)(char e)) { // 初始条件:二叉树T存在,Visit是对结点操作的应用函数。修改算法6.1 // 操作结果:先序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T!=NULL) // T不空 { Visit(T->data); // 先访问根结点 PreOrderTraverse(T->lchild,Visit); // 再先序遍历左子树 PreOrderTraverse(T->rchild,Visit); // 最后先序遍历右子树 } return 0; } void InOrderTraverse(BiTree T,void(*Visit)(char e)) { // 初始条件:二叉树T存在,Visit是对结点操作的应用函数 // 操作结果:中序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T!=NULL) { InOrderTraverse(T->lchild,Visit); // 先中序遍历左子树 Visit(T->data); // 再访问根结点 InOrderTraverse(T->rchild,Visit); // 最后中序遍历右子树 }; } void PostOrderTraverse(BiTree T,void(*Visit)(char e)) { // 初始条件:二叉树T存在,Visit是对结点操作的应用函数 // 操作结果:后序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T!=NULL) // T不空 { PostOrderTraverse(T->lchild,Visit); // 先后序遍历左子树 PostOrderTraverse(T->rchild,Visit); // 再后序遍历右子树 Visit(T->data); // 最后访问根结点 } } int LeafNodes(BiTree T) { int num, num1, num2; if(T==NULL) { num+=0; } else if((T->lchild=NULL)&&(T->rchild==NULL)) num+=1; else { num1 = LeafNodes(T->lchild); num2 = LeafNodes(T->rchild); } num=num1+num2; return num; } void main() { int num; BiTree T; printf("按先序次序输入二叉树中结点的值,输入空格表示节点为空\n"); CreateBiTree(T); // 建立二叉树T printf("先序递归遍历二叉树:\n"); PreOrderTraverse(T,visit); // 先序递归遍历二叉树T printf("\n中序递归遍历二叉树:\n"); InOrderTraverse(T,visit); // 中序递归遍历二叉树T printf("\n后序递归遍历二叉树:\n"); PostOrderTraverse(T,visit); // 后序递归遍历二叉树T printf("\n计算叶子节点个数:"); num=LeafNodes(T); printf("%d",num); printf("\n计算结点总数:"); printf("%d",num+1); }