二叉树的基本算法
链式存储结构
typedef struct tnode {
elem data;
int ltag, rtag;
struct tnode *lchild, *rchild;
} BTNode;
建立二叉树(括号法)
void CreateBTNode(BTNode *&bt, char *str) {
BTNode *St[max], *p;
char ch;
int top = -1, k, j = 0;
bt = 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 (bt == NULL)
bt = p;
else {
switch (k) {
case 1:
St[top]->lchild = p;
break;
case 2:
St[top]->rchild = p;
break;
}
}
}
j++;
ch = str[j];
}
}
销毁二叉树
void DestoryBTree(BTNode *&bt) {
if (bt != NULL) {
DestoryBTree(bt->lchild);
DestoryBTree(bt->rchild);
free(bt);
}
}
求二叉树高度
int BTHeight(BTNode *bt) {
int lchilddep, rchilddep;
if (bt == NULL)
return 0;
else {
lchilddep = BTHeight(bt->lchild);
rchilddep = BTHeight(bt->rchild);
return (lchilddep > rchilddep) ? (lchilddep + 1) : (rchilddep + 1);
}
}
以括号表示法输出二叉树
void DispBTree(BTNode *bt) {
if (bt != NULL) {
printf("%c", bt->data);
if (bt->lchild != NULL || bt->rchild != NULL) {
printf("(");
DispBTree(bt->lchild);
if (bt->rchild != NULL)
printf(",");
DispBTree(bt->rchild);
printf(")");
}
}
}