二叉查找树的镜像

题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于
右子树的结点。用递归和循环两种方法完成树的镜像转换。
例如输入:
8
/ \
6 10
/\ /\
5 7 9 11
输出:
8
/ \
10 6
/\ /\

11 9 7 5

思路:这也是一个递归的题目,对于当前节点,如果不是NULL节点或者叶子节点,那么只需要交换左右子节点即可。这样再次递归调用左右子树。

void ConvertMirror(BinTree* root)
{
	if(root == NULL ||(root->left == NULL &&root->right == NULL))
		return ;
	BinTree* temp = NULL;
	temp = root->left;
	root->left = root->right;
	root->right = temp;
	if(root->left != NULL)
		ConvertMirror(root->left);
	if(root->right != NULL)
		ConvertMirror(root->right);
}

当然也可以不使用递归,使用栈空间来辅助,从栈顶取出节点,交换左右节点,如果左右节点不为空,压入栈

void ConvertMirrorNoIter(BinTree* root)
{
	stack<BinTree*> st;
	if(root == NULL)
		return ;
	st.push(root);
	BinTree* temp;
	while(!st.empty())
	{
		temp = st.top();
		st.pop();
		BinTree* cur = temp->left;
		temp->left = temp->right;
		temp->right = cur;
		
		if(temp->left != NULL)
			st.push(temp->left);
		
		if(temp->right != NULL)
			st.push(temp->right);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值