转自:http://blog.csdn.net/hoken2020856/article/details/5732406
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);
}
非递归的实现中也可以用队伍来实现,使用队列的话有点类似层次遍历。