第2关:二叉树的基本操作
任务描述
本关任务:以顺序结构存储二叉树,编写前序、中序、后序及层次顺序遍历二叉树的算法,并计算二叉树深度、所有结点总数。
测试说明
平台会对你编写的代码进行测试:
测试样例:
#include <stdio.h>
#include <malloc.h>
#include "btree.h"
void CreateBTNode(BTNode *&b, char *str) {
BTNode *St[MaxSize], *p = NULL;
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];
}
}
BTNode *FindNode(BTNode *b, ElemType x) {
if (b == NULL) {
return NULL;
}
if (b->data == x) {
return b;
}
BTNode *left = FindNode(b->lchild, x);
if (left != NULL) {
return left;
}
return FindNode(b->rchild, x);
}
BTNode *LchildNode(BTNode *p) //返回*p节点的左孩子节点指针
{
return p->lchild;
}
BTNode *RchildNode(BTNode *p) //返回*p节点的右孩子节点指针
{
return p->rchild;
}
int BTNodeDepth(BTNode *b) {
if (b == NULL) {
return 0;
}
int leftDepth = BTNodeDepth(b->lchild);
int rightDepth = BTNodeDepth(b->rchild);
return 1 + (leftDepth > rightDepth ? leftDepth : rightDepth);
}
void DispBTNode(BTNode *b) {
if (b != NULL) {
printf("%c", b->data);
if (b->lchild != NULL || b->rchild != NULL) {
printf("(");
DispBTNode(b->lchild);
if (b->rchild != NULL) {
printf(",");
}
DispBTNode(b->rchild);
printf(")");
}
}
}
void DestroyBTNode(BTNode *&b) {
if (b != NULL) {
DestroyBTNode(b->lchild);
DestroyBTNode(b->rchild);
free(b);
}
}