总目录
各部分的解释已经以注释形式写于代码中。
1.基本操作
1.1 结构体构造
typedef struct BiTNode {
char data;
struct BiTNode * lchild, * rchild;
} BiTNode, * BiTree;
1.2 初始化
void InitTree ( BiTree & T) {
T = NULL ;
T = ( BiTree) malloc ( sizeof ( BiTree) ) ;
T-> data = 'A' ;
T-> lchild = NULL ;
T-> rchild = NULL ;
}
1.3 左插入结点
bool InsertLeftTreeNode ( BiTNode* & T, char x) {
BiTNode * p = ( BiTNode* ) malloc ( sizeof ( BiTNode) ) ;
if ( p == NULL ) {
return false ;
}
p-> data = x;
p-> lchild = NULL ;
p-> rchild = NULL ;
T-> lchild = p;
return true ;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
1.4 右插入节点
bool InsertRightTreeNode ( BiTNode* & T, char x) {
BiTNode * p = ( BiTNode* ) malloc ( sizeof ( BiTNode) ) ;
if ( p == NULL ) {
return false ;
}
p-> data = x;
p-> lchild = NULL ;
p-> rchild = NULL ;
T-> rchild = p;
return true ;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
1.5 访问结点
void visit ( BiTree T) {
printf ( "%c " , T-> data) ;
}
1.6 先序遍历(递归)
void PreOrder ( BiTree T) {
if ( T != NULL ) {
visit ( T) ;
PreOrder ( T-> lchild) ;
PreOrder ( T-> rchild) ;
}
}
1.7 中序遍历(递归)
void InOrder ( BiTree T) {
if ( T != NULL ) {
InOrder ( T-> lchild) ;
visit ( T) ;
InOrder ( T-> rchild) ;
}
}
1.8 后序遍历(递归)
void PostOrder ( BiTree T) {
if ( T != NULL ) {
PostOrder ( T-> lchild) ;
PostOrder ( T-> rchild) ;
visit ( T) ;
}
}
1.9 树的深度
int treeDepth ( BiTree T) {
if ( T == NULL ) {
return 0 ;
} else {
int l = treeDepth ( T-> lchild) ;
int r = treeDepth ( T-> rchild) ;
return l > r ? l + 1 : r + 1 ;
}
}
2.完整代码
# include
# include
typedef struct BiTNode {
char data;
struct BiTNode * lchild, * rchild;
} BiTNode, * BiTree;
void InitTree ( BiTree & T) {
T = NULL ;
T = ( BiTree) malloc ( sizeof ( BiTree) ) ;
T-> data = 'A' ;
T-> lchild = NULL ;
T-> rchild = NULL ;
}
bool InsertLeftTreeNode ( BiTNode* & T, char x) {
BiTNode * p = ( BiTNode* ) malloc ( sizeof ( BiTNode) ) ;
if ( p == NULL ) {
return false ;
}
p-> data = x;
p-> lchild = NULL ;
p-> rchild = NULL ;
T-> lchild = p;
return true ;
}
bool InsertRightTreeNode ( BiTNode* & T, char x) {
BiTNode * p = ( BiTNode* ) malloc ( sizeof ( BiTNode) ) ;
if ( p == NULL ) {
return false ;
}
p-> data = x;
p-> lchild = NULL ;
p-> rchild = NULL ;
T-> rchild = p;
return true ;
}
void visit ( BiTree T) {
printf ( "%c " , T-> data) ;
}
void PreOrder ( BiTree T) {
if ( T != NULL ) {
visit ( T) ;
PreOrder ( T-> lchild) ;
PreOrder ( T-> rchild) ;
}
}
void InOrder ( BiTree T) {
if ( T != NULL ) {
InOrder ( T-> lchild) ;
visit ( T) ;
InOrder ( T-> rchild) ;
}
}
void PostOrder ( BiTree T) {
if ( T != NULL ) {
PostOrder ( T-> lchild) ;
PostOrder ( T-> rchild) ;
visit ( T) ;
}
}
int treeDepth ( BiTree T) {
if ( T == NULL ) {
return 0 ;
} else {
int l = treeDepth ( T-> lchild) ;
int r = treeDepth ( T-> rchild) ;
return l > r ? l + 1 : r + 1 ;
}
}
int main ( ) {
BiTree T;
InitTree ( T) ;
InsertLeftTreeNode ( T, 'B' ) ;
InsertRightTreeNode ( T, 'C' ) ;
InsertLeftTreeNode ( T-> lchild, 'D' ) ;
InsertRightTreeNode ( T-> lchild, 'E' ) ;
InsertLeftTreeNode ( T-> rchild, 'F' ) ;
InsertRightTreeNode ( T-> rchild, 'G' ) ;
printf ( "PreOrder\n" ) ;
PreOrder ( T) ;
printf ( "\nInOrder\n" ) ;
InOrder ( T) ;
printf ( "\nPostOrder\n" ) ;
PostOrder ( T) ;
printf ( "\ntreeDepth:%d\n" , treeDepth ( T) ) ;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
3.运行结果