我们需要实现二叉树的镜像操作,问题描述如下:
二叉树的镜像定义:源二叉树
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 ;
}
};
参考:二叉树的镜像