各个函数汇总
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef struct BinaryNode
{
ElemType data;
struct BinaryNode * Lchild, * Rchild;
} BinaryNode, * BinaryTree;
Status CreateBiTree ( BinaryTree & T)
{
ElemType e;
scanf ( "%d" , & e) ;
if ( ! e) { T= NULL ; return OK; }
else
{
T= ( BinaryTree) malloc ( sizeof ( BinaryNode) ) ;
T- > data= e;
if ( ! T) { exit ( OVERFLOW) ; }
CreateBiTree ( T- > Lchild) ;
CreateBiTree ( T- > Rchild) ;
}
return OK;
}
int NodeCount ( BinaryTree & T)
{
if ( ! T) { return 0 ; }
return 1 + NodeCount ( T- > Lchild) + NodeCount ( T- > Rchild) ;
}
int LeafCount ( BinaryTree & T)
{
if ( ! ( T- > Lchild) && ! ( T- > Rchild) ) { return 1 ; }
return LeafCount ( T- > Lchild) + LeafCount ( T- > Rchild) ;
}
int DepthOfBinaryTree ( BinaryTree & T)
{
if ( ! T) { return 0 ; }
if ( ( ! T- > Lchild) && ( ! T- > Rchild) ) { return 1 ; }
if ( DepthOfBinaryTree ( T- > Lchild) >= DepthOfBinaryTree ( T- > Rchild) ) { return 1 + DepthOfBinaryTree ( T- > Lchild) ; }
else { return 1 + DepthOfBinaryTree ( T- > Rchild) ; }
}
int main ( )
{
BinaryTree T;
CreateBiTree ( T) ;
printf ( "%d" , LeafCount ( T) ) ;
getchar ( ) ;
getchar ( ) ;
return 0 ;
}
另:更好看的求深度函数
int DepthOfBinaryTree ( BiTree T)
{
if ( ! T) { return 0 ; }
int depthL= DepthOfBinaryTree ( T- > Lchild) + 1 ;
int depthR= DepthOfBinaryTree ( T- > Rchild) + 1 ;
if ( depthL>= depthR) { return depthL; }
else { return depthR; }
}