您的位置:首页 > 编程语言 > C语言/C++

C++实现二叉树的镜像操作(18)---《那些奇怪的算法》

2017-10-29 23:26 736 查看
我们需要实现二叉树的镜像操作,问题描述如下:

二叉树的镜像定义:源二叉树

8

/ \

6 10

/ \ / \

5 7 9 11

镜像二叉树

8

/ \

10 6

/ \ / \

11 9 7 5

二叉树节点

struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};


栈结构

class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(!pRoot) return;
stack<TreeNode*> sta;
sta.push(pRoot);
while(!sta.empty()){
TreeNode* cur=sta.top();
sta.pop();
if(cur->left||cur->right){
TreeNode* tmp=cur->left;
cur->left=cur->right;
cur->right=tmp;
}
if(cur->left) sta.push(cur->left);
if(cur->right) sta.push(cur->right);
}
}
};


堆结构实现(注意堆得front结构)

class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(!pRoot) return;
queue<TreeNode*> que;
que.push(pRoot);
while(!que.empty()){
TreeNode* cur=que.front();
que.pop();
if(cur->left||cur->right){
TreeNode* tmp=cur->left;
cur->left=cur->right;
cur->right=tmp;
}
if(cur->left) que.push(cur->left);
if(cur->right) que.push(cur->right);
}
}
};


参考别人的递归实现,如下:

class Solution {
public:
void Mirror(TreeNode *pRoot) {

if(pRoot){
TreeNode *tmp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = tmp;
Mirror(pRoot->left);
Mirror(pRoot->right);
}
return ;

}
};


参考:二叉树的镜像
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: