操作给定的二叉树,将其变换为源二 叉树的镜像。
源二叉树
镜像后二叉树
示例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;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return TreeNode类
*/
struct TreeNode* Mirror(struct TreeNode* pRoot ) {
//如果根节点为空就返回
if(!pRoot)
return pRoot;
//如果该节点是叶子结点也返回,因为没有左右儿子需要交换
if(!pRoot->left&&!pRoot->right)
return pRoot;
//建一个变量用来交换,直接交换结点
struct TreeNode* tmp=pRoot->left;
pRoot->left=pRoot->right;
pRoot->right=tmp;
//递归交换左子树的儿子
Mirror(pRoot->left);
//递归交换右子树的儿子
Mirror(pRoot->right);
return pRoot;
}
注意:因为交换的直接是结点而不是结点的值,所以被交换的结点的左右儿子也跟着交换了,如图: