每一棵子树的左孩子和右孩子都发生了交换。既然是“每一棵子树”,那么就意味着重复,既然涉及了重复,就没有理由不用递归。

解题思路

以递归的方式,遍历树中的每一个结点,并将每一个结点的左右孩子进行交换。

  1. /**
  2. * @param {TreeNode} root
  3. * @return {TreeNode}
  4. */
  5. const invertTree = function(root) {
  6. // 定义递归边界
  7. if(!root) {
  8. return root;
  9. }
  10. // 递归交换右孩子的子结点
  11. let right = invertTree(root.right);
  12. // 递归交换左孩子的子结点
  13. let left = invertTree(root.left);
  14. // 交换当前遍历到的两个左右孩子结点
  15. root.left = right;
  16. root.right = left;
  17. return root;
  18. };