码迷,mamicode.com
首页 > 其他好文 > 详细

二叉查找树的镜像

时间:2015-04-29 09:58:55      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:c++   算法   递归      

题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于
右子树的结点。用递归和循环两种方法完成树的镜像转换。
例如输入:
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);
	}
}


二叉查找树的镜像

标签:c++   算法   递归      

原文地址:http://blog.csdn.net/yusiguyuan/article/details/45361649

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!