二叉树的镜像问题是翻转一棵二叉树的左右子节点。我们可以使用递归实现二叉树的镜像算法:
public TreeNode mirrorTree(TreeNode root) {
if (root == null) return null;
TreeNode left = mirrorTree(root.left);
TreeNode right = mirrorTree(root.right);
root.left = right;
root.right = left;
return root;
}
算法流程:
- 递归翻转左右子树。当root为null时递归终止。
- root的左子树为右子树的翻转结果,右子树为左子树的翻转结果。
- 返回root。
- 重复1-3,最终得到整个二叉树的镜像。
时间复杂度O(n),空间复杂度O(n)。
所以,二叉树镜像的关键是:
- 使用递归,当节点root为null时递归终止。
- 将root的左右子树翻转,左子树为右子树的翻转结果,右子树为左子树的翻转结果。
- 重复1和2,最终得到整个二叉树的镜像。
理解二叉树镜像与递归,是算法与编程的重要内容。二叉树镜像算法这一问题包含递归、二叉树等知识与技能。