/**
交换二叉树每个结点左右孩子节点(非递归算法)
算法的基本思想:
1.判断根节点地址是否为空,为空返回
2.将结点放入顺序队列中,每次出队一个结点
3.交换该节点的左右孩子结点,并将孩子结点插入队尾
**/
void change(BTNode *p){
if(p==null) retrun;//判断树是否为空
BTNode *queue[maxSize];//定义一个队列用于存储结点
BTNode *out,*temp;//out为出队指针、temp用于交换左右子树
int front=0;//队列头尾
int rear=0;
queue[front]=p;//初始化队列
queue[rear]=p;
//循环交换左右子树
while(rear<front) {
out=queue[front++]; //出队
//交换左右子树
temp=out->lchild;
out->lchild=out->rchild;
ouot->rchild=temp;
//将交换完成结点插入队列
if(out->lchild!=NULL)
queue[++rear]=out->lchild;
if(out->rchild!=NULL)
queue[++rear]=out->rchild;
}
}
/**
递归算法
**/
void change(BTNode *p){
if(p==NULL)return;
BTNode *temp;
temp=p->lchild;
p->lchild=p->rchild;
p->rchild=temp;
change(p->lchild);
change(p->rchild);
}