剑指offer题型分类及各题的代码及解题思路
1、题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
2、初始结构定义如下:
/*
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) {}
};
3、思路(参考剑指offer第二版P158)
1、如果二叉树无节点或二叉树无左右节点,则原二叉树也是二叉树的镜像,直接返回;
2、交换左右节点的指针;
3、若子节点的左树不为空,则递归调用Mirror函数,交换左右节点指针;
4、若子节点的右树不为空,则递归调用Mirror函数,交换左右节点指针;
5、直至交换全部子节点指针为止。
4、C++实现代码如下:
class Solution
{
public:
void Mirror(TreeNode *pRoot)
{
if(pRoot == NULL)
return;
if(pRoot->left == NULL && pRoot->right == NULL)
return;
TreeNode *temp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = temp;
if(pRoot->left)
Mirror(pRoot->left);
if(pRoot->right)
Mirror(pRoot->right);
}
};