题目:
翻转一棵二叉树。
示例:
输入:
4
/
2 7
/ /
1 3 6 9
输出:
4
/
7 2
/ /
9 6 3 1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/invert-binary-tree
下面是错误的解答:
class Solution { public TreeNode invertTree(TreeNode root) { TreeNode left = root.left; TreeNode right = root.right; if (left != null) { invertTree(left); } if (right != null) { invertTree(right); } if (left != null && right != null) { int leftval = left.val; int rightval = right.val; right.val = leftval; left.val = right.val; } return root; } }
然后。。虽然知道是错的,但是想不出来怎么才是对的
// 先序遍历,根左右 从上向下交换 public TreeNode invertTree(TreeNode root) { if (root == null) return null; TreeNode rightnode = root.right; root.right = invertTree(root.left); // 交换左子树结果赋值给右子树,所以要先记录右子树 root.left = invertTree(rightnode); return root; } // 中序遍历,左根右 public TreeNode invertTree(TreeNode root) { if (root == null) return null; invertTree(root.left); // 递归找到左节点 TreeNode rightnode = root.right; root.right = root.left; root.left = rightnode; // 递归找到右节点 继续交换:因为此时左右节点已经交换了,所以此时的右节点为root.left invertTree(root.left);
return root; } // 后序遍历,左右根 从下向上交换 public TreeNode invertTree(TreeNode root) { if (root == null) return null; TreeNode leftnode = invertTree(root.left); TreeNode rightnode = invertTree(root.right); root.right = leftnode; root.left = rightnode; return root; }