求二元查找树的镜像

本文介绍如何通过递归及两种非递归方法将二元查找树转换为其镜像,使得左子树的结点值均大于右子树结点值。递归方法简单直接,非递归方法则利用栈进行遍历处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
//递归求二元查找树的镜像(即左右子树指针互换)
void MirrorRecursively(BTree pNode)
{
	if (NULL == pNode)
		return;
	//左右子树互换
	BTree temp = pNode->lchild;
	pNode->lchild = pNode->rchild;
	pNode->rchild = temp;
	MirrorRecursively(pNode->lchild);
	MirrorRecursively(pNode->rchild);

}

//非递归求二元查找树的镜像方法1
void NonRecurMirror_1(BTree pNode)
{
	stack<BTree> stck;
	set<BTree> s;
	while (pNode!=NULL || !stck.empty())
	{
		while (pNode != NULL)
		{
			BTree temp = pNode->lchild;
			pNode->lchild = pNode->rchild;
        	pNode->rchild = temp;
			stck.push(pNode);
			pNode = pNode->lchild;
		}
		if (!stck.empty())
		{
			pNode = stck.top();
			stck.pop();
			pNode = pNode->rchild;
		}
	}
}


//非递归求二元查找树的镜像方法2
void NonRecurMirror_2(BTree pNode)
{
	if (NULL == pNode)
	{
		cout << "空树" <<endl;
		return;
	}
    stack<BTree> stck;
	stck.push(pNode);
	while (!stck.empty())
	{
		pNode = stck.top();
		stck.pop();//出栈
		BTree temp = pNode->lchild;
		pNode->lchild = pNode->rchild;
        	pNode->rchild = temp;
		if (pNode->rchild)
			stck.push(pNode->rchild);
		if (pNode->lchild)
			stck.push(pNode->lchild);
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值