翻转二叉树,可以先交换根节点的两个子节点,然后通过同样的方式在交换根节点的子 节点的两个子节点……一直这样交换下去,画个图看一下
    image.png

    1. public TreeNode invertTree(TreeNode root) {
    2. if (root == null) return null;
    3. // 先交换子节点
    4. TreeNode tmp = root.left;
    5. root.left = root.right;
    6. root.right = tmp;
    7. // 递归让子树继续交换
    8. invertTree(root.left);
    9. invertTree(root.right);
    10. return root;
    11. }

    如果对树的遍历比较熟悉的话,我们只要遍历树的所有节点,然后把他们的左右子节点 相互交换即可,如果这样写,那么答案就比较多了。这里来看下二叉树的BFS解法,二 叉树的BFS就是一层一层的遍历,像下面这样
    image.png

    1. public TreeNode invertTree(TreeNode root) {
    2. if (root == null) return null;
    3. Queue<TreeNode> queue = new LinkedList();
    4. queue.offer(root);
    5. while (!queue.isEmpty()) {
    6. // poll方法相当于移除队列头部的元素
    7. TreeNode node = queue.poll();
    8. // 先交换子节点
    9. TreeNode tmp = node.left;
    10. node.left = node.right;
    11. node.right = tmp;
    12. // 子节点加入队列,继续交换
    13. if (node.left != null) queue.offer(node.left);
    14. if (node.right != null) queue.offer(node.right);
    15. }
    16. return root;
    17. }