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

二元查找树的翻转(镜像)的两种思路

时间:2014-10-05 17:52:18      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:c++   数据结构   算法   查找树   镜像   

问题描述:

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

即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
算法:

测试用例:

                                  10

                             /             \

                           5               11

                       /        \

                    3            7

                 /     \         /   \

               2       4     6      9

             /                       /

          1                       8

算法:

有两种思路:

①递归。对树翻转,只需对他的左右子树翻转,再交换左右子树的位置即可。

②非递归。设置一个队列queue,从根节点开始处理:人节点先入列,当队列非空时,循环进行以下处理:从队列中取出一节点,交换他的左右子树的位置,将它的左右子节点入列(若存在的话)。当队列为空时,返回。

代码实现:

①递归

//递归
template<class T>
void ReverseTree(BinaryTreeNode<T>* t)
{
<span style="white-space:pre">	</span>if (!t)
<span style="white-space:pre">		</span>return;
<span style="white-space:pre">	</span>BinaryTreeNode<T>* temp = new BinaryTreeNode<T>;
<span style="white-space:pre">	</span>temp = t->LeftChild;
<span style="white-space:pre">	</span>t->LeftChild = t->RightChild;
<span style="white-space:pre">	</span>t->RightChild = temp;
<span style="white-space:pre">	</span>ReverseTree(t->LeftChild);
<span style="white-space:pre">	</span>ReverseTree(t->RightChild);
<span style="white-space:pre">	</span>return;
}

非递归:

//非递归
template<class T>
void ReverseTree2(BinaryTreeNode<T>* t)
{
	if (!t)
		return;
	Queue<BinaryTreeNode<T>*> q;
	q.Add(t);
	BinaryTreeNode<T>* tt = new BinaryTreeNode < T >;
	while (!q.IsEmpty())
	{
		q.Delete(tt);
		BinaryTreeNode<T>* temp = new BinaryTreeNode < T >;
		temp = tt->LeftChild;
		tt->LeftChild = tt->RightChild;
		tt->RightChild = temp;
		if (tt->LeftChild)
			q.Add(tt->LeftChild);
		if (tt->RightChild)
			q.Add(tt->RightChild);
	}
}


输出测试:

InOrder(n10);
	cout << endl;
	ReverseTree(n10);
	InOrder(n10);
	cout << endl;

	ReverseTree2(n10);
	InOrder(n10);
	cout << endl;

输出结果:

bubuko.com,布布扣



二元查找树的翻转(镜像)的两种思路

标签:c++   数据结构   算法   查找树   镜像   

原文地址:http://blog.csdn.net/hgqqtql/article/details/39803701

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