#include#include #include #define N 50using namespace std;typedef struct tree{ char ch; struct tree *lchild; struct tree *rchild;}BitTree; //数组输入BitTree *CreateTree(int A[], int i, int n){ BitTree *bt; if(i>n) return NULL; else{ bt=(BitTree *)malloc(sizeof(BitTree)); if(A[i]=='#') return NULL; bt->ch=A[i]; bt->lchild=CreateTree(A, 2*i, n); bt->rchild=CreateTree(A, 2*i+1, n); return bt; }} //层次遍历void LayeredOrderTraverse(BitTree *bt);//交换二叉树中所有结点的左右子树位置void ExchangeBT(BitTree *bt){ BitTree *QUEUE[N], *temp, *p=bt; int front = 0, rear = 1; if(p != NULL){ QUEUE[0] = p; while(front < rear){ p = QUEUE[front++]; temp = p->lchild; p->lchild = p->rchild; p->rchild = temp; if(p->lchild != NULL) QUEUE[rear++] = p->lchild; if(p->rchild != NULL) QUEUE[rear++] = p->rchild; } }} int main(){ int A[N]={ '#','A','B','C','D','E','#','F','G','H'}; BitTree *bt=CreateTree(A,1,9); printf("pre-LayeredOrderTraverse:\n"); LayeredOrderTraverse(bt); printf("\n"); ExchangeBT(bt); printf("post-LayeredOrderTraverse:\n"); LayeredOrderTraverse(bt); return 0; }//层次遍历void LayeredOrderTraverse(BitTree *bt){ BitTree *QUEUE[N], *p; int front, rear; if(bt != NULL){ QUEUE[0] = bt; front = 0; rear = 1; while(front < rear){ p = QUEUE[front++]; printf("%c ", p->ch); if(p->lchild != NULL) QUEUE[rear++] = p->lchild; if(p->rchild != NULL) QUEUE[rear++] = p->rchild; } }}