C語言實現二叉樹各種基本運算的演算法
阿新 • • 發佈:2018-11-28
包含如下函式:
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( ")" ); } } }