故事背景
想象你有一棵圣诞树,但这棵树长得不太对称。现在,我们要把这棵树变成它的镜像,就像你在镜子中看到的那样。也就是说,树的左边和右边要互换位置。
我们的树
我们的树就像一个有很多层的圣诞树,每一层都有一个数字。例如:
源二叉树: 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树: 8 / \ 10 6 / \ / \ 11 9 7 5
我们的目标
我们的目标是把这棵圣诞树变成它的镜像,也就是把树的左边和右边互换位置。
如何实现
让我们用一个故事来说明这个过程:
- 互换树的左右子树:对于树中的每一个节点,我们要把它的左子树和右子树交换位置。
- 递归处理子树:对于每个子树,我们也需要做同样的事情,直到树的所有节点都被处理完毕。
代码解释
让我们看看具体的代码实现:
class TreeNode { int val; TreeNode left, right; TreeNode(int x) { val = x; } } public class MirrorTreeTransformer { // 变换为镜像的方法 public TreeNode mirrorTree(TreeNode root) { if (root == null) { return null; } // 互换当前节点的左右子树 TreeNode temp = root.left; root.left = root.right; root.right = temp; // 递归处理左子树 mirrorTree(root.left); // 递归处理右子树 mirrorTree(root.right); return root; } }
详细的解释
- 检查是否有节点:
- 如果树为空(没有节点),就不需要做任何事情。
- 互换左右子树:
- 把当前节点的左子树和右子树互换位置。
- 递归处理子树:
- 对于每个子树,我们也需要做同样的事情,直到所有的节点都被处理完毕。
如果这篇文章对你有帮助,请点个免费的赞👍,让它能够帮助更多的人。