题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
解题思路:这个比较简单了,利用递归的思想,进行左右交换
参考答案:
#include <iostream>
#include <vector>
#include <string>
#include <stack>
#include <algorithm>
#include <math.h>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
//直接交换数据域好像通不过,要交换地址
//class Solution {
//public:
// void Mirror(TreeNode *pRoot) {
//
// if (pRoot == NULL || pRoot->left == NULL || pRoot->right)
// return;
//
// int temp;
//
// temp = pRoot->left->val;
// pRoot->left->val = pRoot->right->val;
// pRoot->right->val = temp;
//
// Mirror(pRoot->left);
// Mirror(pRoot->right);
//
// }
//};
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if (pRoot == NULL)
return;
//考虑根节点左右孩子都为空的情况,就不需要在交换了
if (pRoot->left == NULL && pRoot->right == NULL)
return;
TreeNode* temp_node;
temp_node = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = temp_node;
if(pRoot->left != NULL)
Mirror(pRoot->left);
if(pRoot->right != NULL)
Mirror(pRoot->right);
}
};
//创建树节点
TreeNode* creat_TreeNode(int my_value)
{
TreeNode* my_treenode = new TreeNode;
my_treenode->val = my_value;
my_treenode->right = NULL;
my_treenode->left = NULL;
return my_treenode;
}
//插入树节点
void insert_treenode(TreeNode* origin_treenode, TreeNode* left_treenode, TreeNode* right_treenode)
{
origin_treenode->left = left_treenode;
origin_treenode->right = right_treenode;
}
int main()
{
TreeNode* TreeNode1 = creat_TreeNode(1);
TreeNode* TreeNode2 = creat_TreeNode(2);
TreeNode* TreeNode3 = creat_TreeNode(3);
TreeNode* TreeNode4 = creat_TreeNode(4);
TreeNode* TreeNode5 = creat_TreeNode(5);
TreeNode* TreeNode6 = creat_TreeNode(6);
TreeNode* TreeNode7 = creat_TreeNode(7);
TreeNode* TreeNode11 = creat_TreeNode(2);
TreeNode* TreeNode22 = creat_TreeNode(4);
TreeNode* TreeNode33 = creat_TreeNode(7);
insert_treenode(TreeNode1,TreeNode2,TreeNode3);
insert_treenode(TreeNode2,TreeNode4,TreeNode5);
insert_treenode(TreeNode3,TreeNode6,TreeNode7);
insert_treenode(TreeNode11,TreeNode22,TreeNode33);
Solution solution;
solution.Mirror(TreeNode1);
return 0;
}