题目描述:
操作给定的二叉树,将其变换为源二叉树的镜像。如下图:
解题思路:利用二叉树的先序遍历
- 判断当前结点是否为空,如果为空则返回null,否则进入2;
- 判断当前结点的左右子树是否为空,只要有一个不为空则进行当前结点的左右子树进行交换;
- 递归将左子树镜像化;
- 递归将右子树镜像化;
- 返回根节点。
代码如下所示:
public TreeNode Mirror (TreeNode pRoot) {
// write code here
if(pRoot == null){//如果根节点为空则返回null
return null;
}
TreeNode cur = pRoot;//当前结点
if(cur.left != null || cur.right != null){
//如果当前结点的左子树或右子树不为空则进行左右子树的交换
TreeNode temp = cur.left;
cur.left = cur.right;
cur.right = temp;
}
Mirror(cur.left);//递归遍历左子树,使左子树的左右结点进行交换
Mirror(cur.right);//递归遍历右子树,使右子树的左右结点进行交换
return pRoot;
}
注意:测试用例中的二叉树并非完全是对称二叉树,因此判断条件得是或逻辑,而非与逻辑。