翻转二叉树,可以先交换根节点的两个子节点,然后通过同样的方式在交换根节点的子 节点的两个子节点……一直这样交换下去,画个图看一下
public TreeNode invertTree(TreeNode root) {if (root == null) return null;// 先交换子节点TreeNode tmp = root.left;root.left = root.right;root.right = tmp;// 递归让子树继续交换invertTree(root.left);invertTree(root.right);return root;}
如果对树的遍历比较熟悉的话,我们只要遍历树的所有节点,然后把他们的左右子节点 相互交换即可,如果这样写,那么答案就比较多了。这里来看下二叉树的BFS解法,二 叉树的BFS就是一层一层的遍历,像下面这样
public TreeNode invertTree(TreeNode root) {if (root == null) return null;Queue<TreeNode> queue = new LinkedList();queue.offer(root);while (!queue.isEmpty()) {// poll方法相当于移除队列头部的元素TreeNode node = queue.poll();// 先交换子节点TreeNode tmp = node.left;node.left = node.right;node.right = tmp;// 子节点加入队列,继续交换if (node.left != null) queue.offer(node.left);if (node.right != null) queue.offer(node.right);}return root;}
