//将二叉树中所有节点的左右子树相互交换 BiNode* Exchange(BiNode* T) { BiNode* p; if(NULL==T || (NULL==T->lchild && NULL==T->rchild)) return T; p = T->lchild; T->lchild = T->rchild; T->rchild = p; if(T->lchild) { T->lchild = Exchange(T->lchild); } if(T->rchild) { T->rchild = Exchange(T->rchild); } return T; } //将二叉树中所有节点的左右子树相互交换 //不使用递归 void NonRecursive_Exchange(BiNode* T) { Stack s; BiNode* p; if(NULL==T) return; InitStack(&s); Push(&s,T); while(!isEmpty(&s)) { T = Pop(&s); p = T->lchild; T->lchild = T->rchild; T->rchild = p; if(T->rchild) Push(&s,T->rchild); if(T->lchild) Push(&s,T->lchild); } DestroyStack(&s); }