请问我这个求叶子节点错在哪里了啊?

来源:百度知道 编辑:UC知道 时间:2024/06/08 18:17:48
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
#define NULL 0
typedef char TElemType;
typedef int Status;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

CreateBiTree(BiTree *T) /* 建立二叉树*/
{
char ch;
ch=getchar();
if (ch=='#') (*T)=NULL; /* #代表空指针*/
else {
(*T)=(BiTree) malloc(sizeof(BiTNode)); /*申请结点 */
(*T)->data=ch; /*生成根结点 */
CreateBiTree(&(*T)->lchild) ; /*构造左子树 */
CreateBiTree(&(*T)->rchild) ; /*构造右子树 */
}
return 1;
}

void PreOrder(BiTree T) /* 先序遍历二叉树*/
{
if (T) {
/*访问根结点,此处简化为输出根结点的数据值*/
PreOrder(T->lchild); /*中序遍历左子树*/
printf("%2c",T->data);
PreOrder(T->rchild); /*中序遍历右子树*/
}
}
void Levl

错在没有将leaf函数的返回值累加,可以改成这样:

int leaf(BiTree t) /*求二叉树的叶子*/
{
if (t != NULL)
{
if (t->lchild==NULL&& t->rchild==NULL)
return 1;
else
return leaf(t->lchild) + leaf(t->rchild);
}

return 0;
}

你的方法有问题