226. 翻转二叉树

翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 备注:这个问题是受到 Max Howell 原问题 启发的 : 谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。

解题思路

递归
自底向上的交换左右子树
左右孩子都有,交换左右子树
只有左孩子,把左孩子变成右孩子
只有右孩子,把右孩子变成左孩子**

  1. class Solution {
  2. public:
  3. TreeNode* invertTree(TreeNode* root) {
  4. /*
  5. 自底向上的交换左右子树
  6. 左右孩子都有,交换左右子树
  7. 只有左孩子,把左孩子变成右孩子
  8. 只有右孩子,把右孩子变成左孩子
  9. */
  10. if(root == NULL)
  11. return NULL;
  12. invertTree(root->left);
  13. invertTree(root->right);
  14. if(root->left != NULL || root->right !=NULL){
  15. TreeNode*temp = root->left;
  16. root->left = root->right;
  17. root->right =temp;
  18. }
  19. else if(root->left != NULL || root->right == NULL){
  20. root->right = root->left;
  21. root->left = NULL;
  22. }
  23. else if(root->right != NULL || root->left == NULL){
  24. root->left = root->right;
  25. root->right = NULL;
  26. }
  27. return root;
  28. }
  29. };