程序员面试100题之十三:求二叉查找树的镜像
2011-11-09 09:35
218 查看
转自:http://blog.csdn.net/hackbuteer1/article/details/6724812
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。
例如输入:
8
/ \
6 10
/\ /\
5 7 9 11
输出:
8
/ \
10 6
/\ /\
11 9 7 5
这题相对很简单,没什么说的,直接代码了。。。
view
plain
void BSTree::mirrorRec(BSTreeNode* node)
{
if (!node)
return;
mirrorRec(node->lc);
mirrorRec(node->rc);
BSTreeNode* temp = node->lc; //交换左、右子树
node->lc = node->rc;
node->rc = temp;
}
void BSTree::mirrorRec() // 递归
{
mirrorRec(root);
}
void BSTree::mirror() // 非递归
{
stack<BSTreeNode*> st;
st.push(root); //将二叉树的根结点压栈
while (!st.empty())
{
BSTreeNode *t = st.top();
BSTreeNode *temp;
st.pop();
temp = t->lc; //交换左、右子树
t->lc = t->rc;
t->rc = temp;
if (t->lc)
st.push(t->lc);
if (t->rc)
st.push(t->rc);
}
}
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。
例如输入:
8
/ \
6 10
/\ /\
5 7 9 11
输出:
8
/ \
10 6
/\ /\
11 9 7 5
这题相对很简单,没什么说的,直接代码了。。。
view
plain
void BSTree::mirrorRec(BSTreeNode* node)
{
if (!node)
return;
mirrorRec(node->lc);
mirrorRec(node->rc);
BSTreeNode* temp = node->lc; //交换左、右子树
node->lc = node->rc;
node->rc = temp;
}
void BSTree::mirrorRec() // 递归
{
mirrorRec(root);
}
void BSTree::mirror() // 非递归
{
stack<BSTreeNode*> st;
st.push(root); //将二叉树的根结点压栈
while (!st.empty())
{
BSTreeNode *t = st.top();
BSTreeNode *temp;
st.pop();
temp = t->lc; //交换左、右子树
t->lc = t->rc;
t->rc = temp;
if (t->lc)
st.push(t->lc);
if (t->rc)
st.push(t->rc);
}
}
评:此题关键是交换指针,而不是交换数。若交换的是数则不好实现。
相关文章推荐
- 程序员面试100题之十三:求二叉查找树的镜像
- 程序员面试100题之十三:求二叉查找树的镜像
- 二叉查找树的分层遍历输出和镜像
- python实现二叉树的镜像、公共最低祖先、二叉查找树的搜索
- C语言 二叉查找树镜像
- 15. 二叉查找树的镜像
- 二叉查找树的镜像
- [程序员面试题精选100题]11.求二叉查找树的镜像
- 二叉查找树镜像翻转
- [程序猿面试题精选100题]11.求二叉查找树的镜像
- 将二叉查找树转换为其镜像
- 二叉查找树:Python实现
- Docker镜像
- 剑指Offer—18—二叉树的镜像
- 教你如何用Windows7系统备份系统镜像的办法【*免费xp系统下载*】
- maven学习(3):本地仓库和镜像仓库的修改
- linux挂载iso镜像时报错的解决方法 mount: can't find cdrom in /etc /fstab or /etc/mtab
- 分享:光盘镜像编辑及刻录工具UltraISO
- docker学习-进入的container及创建本地镜像
- 二叉查找树的c++实现