要求使用递归和循环两种方法.
二叉树节点定义:
typedef struct BSTreeNode{
int m_nValue;
struct BSTreeNode * m_pLeft;
struct BSTreeNode * m_pRight;
}BSTreeNode;
一.递归
void reverseBTree(BSTreeNode * bstree)
{
BSTreeNode * pnode;
if(bstree)
{
reverseBTree(bstree->m_pLeft);
reverseBTree(bstree->m_pRight);
pnode = bstree->m_pLeft;
bstree->m_pLeft = bstree->m_pRight;
bstree->m_pRight = pnode;
}
}
二. 循环
循环的实现中需要使用栈或者队列来遍历二叉树, 栈/队列中元素为树节点的指针
void reverseBTree_cycle(BSTreeNode * bstree)
{
Stack st;
BSTreeNode * current;
BSTreeNode * temp;
if(!bstree)
return;
initStack(&st);
push(&st, bstree);
while(!isEmpty(&st))
{
pop(&st, ¤t);
temp = current->m_pRight;
current->m_pRight = current->m_pLeft;
current->m_pLeft = temp;
if(current->m_pLeft)
push(&st, current->m_pLeft);
if(current->m_pRight)
push(&st, current->m_pRight);
}
}