微软面试百题015——镜像翻转BST
2016-08-23 21:55
253 查看
1.题目描述
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入:
8
/ \
6 10
/\ /\
5 7 9 11
输出:
8
/ \
10 6
/\ /\
11 9 7 5
2.算法思路:
标准的递归思路,我们采用前序遍历的顺序,不断的对树进行翻转,知道遇到空节点为止奇葩的非递归思路,首先,我们要意识到,递归其实完全可以用栈来进行代替,用辅助栈模拟递归的过程不困难
我们这么来看,我们每一层递归唯一的差别就是操作的根节点的不同,所以说所以说我们的辅助栈保存操作的根节点,直到我们的辅助栈为空说明镜像翻转完成
3.代码示例:
void mirror(point* p) { if(p==NULL) return ; else { point* k=p->left; p->left=p->right; p->right=k; mirror(p->left); mirror(p->right); } } void mirroranother() { int num=0; stack<point*> mystack; //辅助栈 mystack.push(root); while(mystack.size()!=0) { point* k=mystack.top(); point* help=k->left; k->left=k->right; k->right=help; mystack.pop(); if(k->left!=NULL) mystack.push(k->left); //小心这两句防止访问空节点 if(k->right!=NULL) mystack.push(k->right); } }
相关文章推荐
- 二叉树的镜像 【微软面试100题 第十五题】
- 微软面试之15题 输入一颗二元查找树 将该树转化为他的镜像
- 【从零单排之微软面试100题系列】10之翻转单词顺序
- 微软面试百题016——BST层序遍历
- 微软面试100之10 翻转句子中单词的顺序
- 微软面试之10 单词翻转
- 微软面试百题008——后序遍历找BST
- 【从零单排之微软面试100题系列】15之二叉树的镜像
- 翻转句子中单词的顺序 【微软面试100题 第十题】
- 翻转句子中单词的顺序 【微软面试100题 第十题】
- 微软面试百题001——BST转化有序双向链表
- 微软面试百题004——指定BST路径和
- 二叉树的镜像 【微软面试100题 第十五题】
- 全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题]
- 全新整理:微软、谷歌、百度等公司经典面试100题[第1-60题]
- 据说是微软面试哦
- 微软镜像资源ISO全收录
- 从尾到头输出链表 【微软面试100题 第五十八题】
- 算法面试:精选微软经典的算法面试100题
- 永久优化:微软面试100题之第1-10题答案修正与优化