您的位置:首页 > 职场人生

经典面试题:二输入一颗二元查找树,得到树的镜像(递归和循环实现)

2017-03-23 17:37 260 查看
题目:

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

输出:
8
/ \
10 6
/ \ / \
11 9 7 5

思路:使用递归的话,前序、中序、后序都能很简单地完成这个问题。使用循环的话,也就是非递归,则需要使用层次遍历的方法,层级遍历一般则是借助了队列完成先进先出的功能。

如下,递归我采用稍微有点改变的中序遍历,队列我直接使用双向队列deque,包含了queue和stack的功能,比较方便。

//递归版本
void ReverseBST(TreeNode* root)
{
if(root!=NULL)
{
ReverseBST(root->left);
swap(root->left, root->right);
ReverseBST(root->left); //左右进行了交换,所以这里还用左结点

}
}
//循环版本
void ReverseBST2(TreeNode* root)
{
deque<TreeNode*> treeDeque;
while(root!=NULL)
{
treeDeque.push_back(root->left);
treeDeque.push_back(root->right);
swap(root->left, root->right);
if(treeDeque.empty())
{
break;
}
else
{
root = treeDeque.front();
treeDeque.pop_front();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐