二叉树基本操作 节点的计算问题
我用前序遍历来计算节点数,可是发现那个计算只加了一次。#include <stdio.h>
#include <malloc.h>
#include <process.h>
#define MaxTreeSize 100
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef char TElemType;
typedef int Status;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreateBiTree(BiTree *T){
char c;
scanf("%c",&c);
if(c=='#')
*T=NULL;
else{
if(!(*T=(BiTNode *)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
(*T)->data=c;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
return OK;
}
Status Visit(TElemType e){
printf("%c",e);
return OK;
}
Status PreOrderTraverse(BiTree T,Status(* Visit)(TElemType e)){
int *count = 0;
if(T){
if(Visit(T->data))
*count++;
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit))
return OK;
return ERROR;
}
else return OK;
return *count;
}
void main(){
BiTree T;
printf("构建空二叉树\n");
printf("向二叉树各节点赋值\n");
CreateBiTree(&T);
int n;
n=PreOrderTraverse(T,Visit);
printf("\n该二叉树共有%d个结点",n);
}
我输入 AA##A##
然后,节点数就只有1,但是那个遍历左右孩子都遍历的了。这个是为什么呢?
我想问题是在前序遍历那里的count。。但是就是不知道怎么弄。。