二叉树交换左右子树非递归算法
基本思想:(先序,中序,后序,层次遍历都可以实现,本质就是就是交换每个节点的左右孩子)
(1)若树非空,则入队
(2)若队头指针的左右孩子非空,则入队。
(3)交换对头节点的左右孩子,出队。
(4)重复步骤(2)(3)直到队列为空
(5)交换结束。
算法:
1 void Exchange(BinTree BT){ 2 Queue Q; 3 initQueue(Q); 4 if(BT!=NULL){ 5 EnQueue(Q,BT); 6 } 7 while(!isEmptyQueue(Q)){ 8 BinTree p=QueueHead(Q); 9 if(p->lchild!=NULL){ 10 EnQueue(Q,p->lchild); 11 } 12 if(p->rchild!=NULL){ 13 EnQueue(Q,p->rchild); 14 } 15 BinTree temp; 16 temp=p->lchild; 17 p->lchild=p->rchild; 18 p->rchild=temp; 19 } 20 }