题目难度:简单
考察内容:树,递归,三变量交换
题目简介:操作给定的二叉树,将其变换为源二叉树的镜像。
算法设计
关于树的题目大多和递归有关,这和树的结构有关,子树同样是一棵树,这种采用递归会使代码非常简洁,注意要考虑空树的情况
对于这题,实际上就是将左右子树交换
如何交换?
回想怎么交换两个数a,b,可以swap(a,b),可以用三变量交换法,c=a,a=b,b=c
同理,交换左右子树也可以采用三变量交换法
不同的是,交换的左右子树应该是交换后的,如图所示
TreeNode *ch=Mirror(pRoot->right);//ch=右子树,这里等于的右子树需要也交换,所以要递归处理
pRoot->right=Mirror(pRoot->left);//右子树=左子树,同上,也需要递归处理
pRoot->left=ch;//左子树=ch=右子树注意要考虑空子树
if(pRoot==NULL)return NULL;
整体代码如下
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return TreeNode类
*/
TreeNode* Mirror(TreeNode* pRoot) {
if(pRoot==NULL)return NULL;//树为空则返回
TreeNode *ch=Mirror(pRoot->right);//ch=右子树,这里等于的右子树需要也交换,所以要递归处理
pRoot->right=Mirror(pRoot->left);//右子树=左子树,同上,也需要递归处理
pRoot->left=ch;//左子树=ch=右子树
return pRoot;返回交换后的树
}
};
京公网安备 11010502036488号