输入一棵二元查找树, 将该树转换为它的镜像

来源:互联网 发布:ie11 找不到js 编辑:程序博客网 时间:2024/05/20 03:47


要求使用递归和循环两种方法.


二叉树节点定义:

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, &current);

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);

}
}

0 0
原创粉丝点击