您的位置:首页 > Web前端

剑指offer-算法题练习:part20 二叉树的镜像

2016-10-06 20:59 633 查看
剑指offer-算法题练习:part20 二叉树的镜像

题目描述

操作给定的二叉树,将其变换为源二叉树的镜像。

输入描述:

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

    8

   /  \

 6   10

 / \   / \

5 7 9 11

镜像二叉树

     8

   /    \

 10    6

  / \    / \

11 9 7 5

<解析>

code1——递归法

/*
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) {
TreeNode * p=NULL;
if(pRoot!=NULL) {
p = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = p;
if(pRoot->left != NULL) Mirror(pRoot->left);
if(pRoot->right!= NULL) Mirror(pRoot->right);
}
}
};

code2——非递归

/*
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==NULL) return ;
TreeNode * p;
TreeNode* tmp;
stack<TreeNode*> stk;
stk.push(pRoot);

while(!stk.empty()){
p = stk.top();
stk.pop();
if(p->left != NULL || p->right != NULL){
tmp = p->left;
p->left = p->right;
p->right = tmp;
}
if(p->left!=NULL) stk.push(p->left);
if(p->right!=NULL) stk.push(p->right);
}

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