通过先序遍历,遇到非叶子结点,则交换其左右子节点的位置;遇到叶子结点则返回
public void Mirror(TreeNode root) { if (root == null) { return; } if (root.left == null && root.right == null) { // 非叶子节点 return; } // 对非叶子节点(至少有一个子节点,左节点或右节点),交换左右节点 TreeNode temp = root.left; root.left = root.right; root.right = temp; // 当有左节点时,继续交换左右子节点 if (root.left!=null){ Mirror(root.left); } // 当有右节点时,继续交换左右子节点 if (root.right!=null){ Mirror(root.right); } }
可以通过一个示例来了解一下: