将二叉树的两个孩子换位置,即左变右,右变左。(递规与非递规两种方法)

将二叉树的两个孩子换位置,即左变右,右变左。(用递归和非递归两种方法)
2011-10-14 8:35

将二叉树的两个孩子换位置,即左变右,右变左。(用递归和非递归两种方法)

递归的版本:

void change( BTree * pTree )
{
if( NULL == pTree )
return;
BTree * pTemp = pTree.left;
pTree-> left = pTree-> right;
pTree-> right= pTemp;
change( pTree-> left );
change( pTree-> right );
}
=============使用队列==========================

算法思想:

1、根结点入队列,即放入列尾。

2、从队列中取出一个结点,即从队列头部取出一个元素。

3、将取出来的结点的左右儿子交换,然后依次放入队列尾部。

4、如果队列不为空,循环执行第2、3步。

作者:刘华喜

迭代版的如下,使用了队列
void change( BTree * pTree )
{
if( NULL == pTree )
return;
queue <BTree*> qu;
qu.push(pTree);
BTree*pTree2 = null;
while(!qu.empty(){
pTree2= qu.front( );
qu.pop();
BTree * pTemp = pTree2-> left;
pTree2-> left = pTree2-> right;
pTree2-> right= pTemp;
if(pTree2-> left!=null)
qu.push(pTree2-> left);
if(pTree2-> right!=null)
qu.push(pTree2-> right);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值