剑指 Offer 27. 二叉树的镜像
node.right
节点,因为我们在递归完左边才递归右边,而递归完左边的时候,直接把node.right
的指向修改了,如果事先不保存node.right
节点的话,在递归右边传入的节点是错误的节点,因此得不到正确的答案class Solution { public TreeNode mirrorTree(TreeNode root) { return dfs(root); } public TreeNode dfs(TreeNode node) { // 为空说明到底了 if (node == null) { return null; } // 先记录right节点 TreeNode right = node.right; // 分别递归左边和右边,将 left 和 right 的指针互相交换 node.right = mirrorTree(node.left); node.left = mirrorTree(right); return node; } }
class Solution { public TreeNode mirrorTree(TreeNode root) { if (root == null) { return null; } // 使用队列存储节点 Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); // 将子节点入队 if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } // 交换左右两个子节点 TreeNode temp = node.left; node.left = node.right; node.right = temp; } return root; } }