输入一颗二元查找树,将该树转换为它的镜像
2018-02-13 18:16
239 查看
输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
例如给定下列的输入:
然后有如下的输出:
解法一:递归
首先交换根节点8的左右子树,10,6的左右子树顺序不变,然后交换根节点6的左右子节点,直到左右子节点为空为止。
代码:BSTreeNode*digui(BSTreeNode*pRoot)
{
if(pRoot!=NULL)
{
BSTreeNode * pRight=pRoot->right;
BSTreeNode * pLeft=pRoot->left;
//递归
pRoot->left=digui(pRight);//右子树转换成左子树
pRoot->right=digui(pLeft);//左子树转换右子树
}
return pRoot;
}解法二:循环
我们需要一个辅助栈
每次取栈顶元素交换左右子女,然后将左右子女分别压入辅助栈,当栈中元素为空时,结束循环。
应用栈的原理,首先把8压栈。然后开始操作栈,如果栈不空,就弹出栈中的元素,并交换元素的左右两个子节点。
如果这两个节点分别处理,如果不空,然后压入栈中,压栈操作完后,再对栈进行操作。
(本质也是递归)
代码如下:BSTreeNode*xunhuan(BSTreeNode*pRoot)
{
if(pRoot!=NULL)
{
stack<BSTreeNode *> stk;//辅助栈
stk.push(pRoot);//压入根节点
while(stk.size())
{
BSTreeNode*pNode=stk.top();
BSTreeNode *pLeft = pNode->left;
BSTreeNode* pRight = pNode->right;
stk.pop();
if(pLeft != NULL)
stk.push(pLeft);
if(pRight != NULL)
stk.push(pRight);
pNode->left = pRight; //交换左右子女
pNode->right = pLeft;
}
}
return pRoot;
}
例如给定下列的输入:
然后有如下的输出:
解法一:递归
首先交换根节点8的左右子树,10,6的左右子树顺序不变,然后交换根节点6的左右子节点,直到左右子节点为空为止。
代码:BSTreeNode*digui(BSTreeNode*pRoot)
{
if(pRoot!=NULL)
{
BSTreeNode * pRight=pRoot->right;
BSTreeNode * pLeft=pRoot->left;
//递归
pRoot->left=digui(pRight);//右子树转换成左子树
pRoot->right=digui(pLeft);//左子树转换右子树
}
return pRoot;
}解法二:循环
我们需要一个辅助栈
每次取栈顶元素交换左右子女,然后将左右子女分别压入辅助栈,当栈中元素为空时,结束循环。
应用栈的原理,首先把8压栈。然后开始操作栈,如果栈不空,就弹出栈中的元素,并交换元素的左右两个子节点。
如果这两个节点分别处理,如果不空,然后压入栈中,压栈操作完后,再对栈进行操作。
(本质也是递归)
代码如下:BSTreeNode*xunhuan(BSTreeNode*pRoot)
{
if(pRoot!=NULL)
{
stack<BSTreeNode *> stk;//辅助栈
stk.push(pRoot);//压入根节点
while(stk.size())
{
BSTreeNode*pNode=stk.top();
BSTreeNode *pLeft = pNode->left;
BSTreeNode* pRight = pNode->right;
stk.pop();
if(pLeft != NULL)
stk.push(pLeft);
if(pRight != NULL)
stk.push(pRight);
pNode->left = pRight; //交换左右子女
pNode->right = pLeft;
}
}
return pRoot;
}
相关文章推荐
- 输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- 微软100题15题(输入一颗二元查找树,将该树转换为它的镜像)
- 13.输入一颗二元查找树,将该树转换为它的镜像
- 每天学习一算法系列(15)(输入一颗二元查找树,将该树转换为它的镜像)
- 15.输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- 题目:输入一颗二元查找树,将该树转换为它的镜像,
- No15、输入一颗二元查找树,将该树转换为它的镜像
- 解题笔记(32)——输入一颗二元查找树,将该树转换为它的镜像
- 【练习】输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。
- 输入一颗二元查找树,将该树转换为它的镜像
- 第15 题: 题目:输入一颗二元查找树,将该树转换为它的镜像,
- No15_输入一颗二元查找树,将该树转换为它的镜像,
- 【java 面试100】15 :输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- 输入一颗二元查找树,将该树转换为它的镜像
- 13. 微软面试题:题目:输入一颗二元查找树,将该树转换为它的镜像
- 【编程题目】输入一颗二元查找树,将该树转换为它的镜像