/* 10.后序遍历 */
void postOrder(struct BTreeNode *bt)
{
if(bt != NULL){
postOrder(bt- >left); /* 后序遍历左子树 */
postOrder(bt- >right); /* 后序遍历右子树 */
printf( "%c ", bt->data); /* 访问根结点 */
}
return;
}
/* 11.按层遍历 */
void levelOrder(struct BTreeNode *bt)
{
struct BTreeNode *p;
struct BTreeNode *q[QUEUE_MAX_SIZE];
int front = 0, rear = 0;
/* 将树根指针进队 */
if(bt != NULL){
rear = (rear + 1) % QUEUE_MAX_SIZE;
q[rear] = bt;
}
while(front != rear){ /* 队列非空 */
front = (front + 1) % QUEUE_MAX_SIZE; /* 使队首指针指向队首元素 */
p = q[front];
printf( "%c ", p->data);
/* 若结点存在左孩子,则左孩子结点指针进队 */
if(p- >left != NULL){
rear = (rear + 1) % QUEUE_MAX_SIZE;
q[rear] = p- >left;
}
/* 若结点存在右孩子,则右孩子结点指针进队 */
if(p- >right != NULL){
rear = (rear + 1) % QUEUE_MAX_SIZE;
q[rear] = p- >right;
}
}
return;
}
/************************************************************************/
/*
int main(int argc, char *argv)
{
struct BTreeNode *bt; /* 指向二叉树根结点的指针 */
char *b; /* 用于存入二叉树广义表的字符串 */
elemType x, *px;
initBTree( &bt);
printf( "输入二叉树广义表的字符串:\n");
/* scanf( "%s", b); */
b = "a(b(c), d(e(f, g), h(, i)))";
createBTree( &bt, b);
if(bt != NULL)
printf( " %c ", bt->data);
printf( "以广义表的形式输出:\n");
printBTree(bt); /* 以广义表的形式输出二叉树 */
printf( "\n");
printf( "前序:"); /* 前序遍历 */
preOrder(bt);
printf( "\n");
printf( "中序:"); /* 中序遍历 */
inOrder(bt);
printf( "\n");
printf( "后序:"); /* 后序遍历 */
postOrder(bt);
printf( "\n");
printf( "按层:"); /* 按层遍历 */
levelOrder(bt);
printf( "\n");
/* 从二叉树中查找一个元素结点 */
printf( "输入一个待查找的字符:\n");
scanf( " %c", &x); /* 格式串中的空格跳过空白字符 */
px = findBTree(bt, x);
if(px){
printf( "查找成功:%c\n", *px);
}else{
printf( "查找失败!\n");
}
printf( "二叉树的深度为:");
printf( "%d\n", BTreeDepth(bt));
clearBTree( &bt);
return 0;
}
*/
&n