包含如下函数:
CreateBTree( BTNode * &b, char * str ) : 由 括号表 示 串 str 创 建二叉链b ;
FindNode( BTNode * &b, ElemType x ) : 返回data域 为 x的节点 指 针 ;
LchildNode( BTNode * &p ) : 返回p节点的左孩子节点 指 针 ;
RchildNode( BTNode * &p ) : 返回p节点的右孩子节点 指 针 ;
BTHeight( BTNode * &b ) : 返回二叉 树 b的高度 ;
DispBTree( BTNode * &b ) : 以括号表 示 法输出二叉 树 b ;
DestroyBTree( BTNode * &b ) : 释 放 二叉 树 b的所 节点 。
#include "stdio.h"
#include "malloc.h"
#define MaxSize 100
typedef char ElemType;
typedef struct node {
ElemType data;
struct node * lchild;
struct node * rchild;
} BTNode;
void CreateBTree( BTNode * &b, char * str )
{
BTNode * St[MaxSize], *p;
int top = -1, k, j = 0;
char ch;
b = NULL;
ch = str[j];
while ( ch != '\0' )
{
switch ( ch )
{
case '(': top++; St[top] = p; k = 1; break;
case ')': top--; break;
case ',': k = 2; break;
default: p = (BTNode * ) malloc( sizeof(BTNode) );
p->data = ch;
p->lchild = p->rchild = NULL;
if ( b == NULL )
b = p;
else{
switch ( k )
{
case 1: St[top]->lchild = p; break;
case 2: St[top]->rchild = p; break;
}
}
}
j++;
ch = str[j];
}
}
void DestroyBTree( BTNode * &b )
{
if ( b != NULL )
{
DestroyBTree( b->lchild );
DestroyBTree( b->rchild );
free( b );
}
}
BTNode * FindNode( BTNode *b, ElemType x )
{
BTNode *p;
if ( b == NULL )
return(b);
else{
p = FindNode( b->lchild, x );
if ( p != NULL )
return(p);
else
return(FindNode( b->rchild, x ) );
}
}
BTNode * LchildNode( BTNode * p )
{
return(p->lchild);
}
BTNode * RchildNode( BTNode * p )
{
return(p->rchild);
}
int BTHeight( BTNode * b )
{
int lchildh, rchildh;
if ( b == NULL )
return(0);
else{
lchildh = BTHeight( b->lchild );
rchildh = BTHeight( b->rchild );
return( (lchildh > rchildh) ? (lchildh + 1) : (rchildh + 1) );
}
}
void DispBTree( BTNode * b )
{
if ( b != NULL )
{
printf( "%c", b->data );
if ( b->lchild != NULL || b->rchild != NULL )
{
printf( "(" );
DispBTree( b->lchild );
if ( b->rchild != NULL )
printf( "," );
DispBTree( b->rchild );
printf( ")" );
}
}
}