首先我们看题目的要求,我们需要对树进行遍历,在遍历的途中将左右子节点的指针对调,由此联想到后序遍历,因为后序遍历是从叶子节点开始的,而我们需要的也是从叶子节点开始。 递归 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public void Mirror(TreeNode root) { if(root == null) return; TreeNode tmp = root.left; root.left = root.right; root.right = tmp; Mirror(root.left); Mirror(root.right); } } 非递归 非递归的话我们采用队列模拟的方式遍历树 import java.util.*; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public void Mirror(TreeNode root) { if(root == null) return ; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); int len; TreeNode now,temp; while(queue.isEmpty() == false){ len = queue.size(); for(int i=0; i<len; i++){ now = queue.poll(); temp = now.left; now.left = now.right; now.right = temp; if(now.left != null) queue.offer(now.left); if(now.right != null) queue.offer(now.right); } } } }