请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
镜像输出:示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
题解
递归
根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。
终止条件:
当节点 root为空时(即越过叶节点),则返回 null;
递推:
初始化节点 tmpt,用于暂存 root的左子节点;
开启递归 右子节点 mirrorTree(root.right),并将返回值作为 root的 左子节点 。
开启递归 左子节点 mirrorTree(tmp),并将返回值作为 root的 右子节点 。
返回值:
返回当前节点 root;
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode mirrorTree(TreeNode root) {
//当节点为空时,直接返回
if(root==null){
return null;
}
//设置一个临时的节点tmp用来存储当前节点的左子树
TreeNode temp=root.left;
//以下两个操作是在交换当前节点的左右子树
root.left=mirrorTree(root.right);
//当前节点的左子树为节点的右子树
//同时递归下去,不停的交互子树中的节点
root.right=mirrorTree(temp);
//当前节点的右子树为节点的左子树
//同时递归下去,不停的交互子树中的节点
//最后返回根节点
return root;
}
}