• 通过先序遍历,遇到非叶子结点,则交换其左右子节点的位置;遇到叶子结点则返回

    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);
          }
      }
  • 可以通过一个示例来了解一下:
    图片说明