LeetCode226.翻转二叉树-递归法


226.翻转二叉树

  题目:输入二叉树根节点,把整棵树镜像翻转

  思路:将树的每个节点的左右节点交换,本质是二叉树的递归遍历

解1:递归-前序

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) return root;
        swap(root->left, root->right);  //交换当前节点左右孩子节点 
        invertTree(root->left); //处理左子节点
        invertTree(root->right); //处理右子节点
        return root;
    }
};

解2:递归-后序

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) return root;
        invertTree(root->left); //处理左子节点
        invertTree(root->right); //处理右子节点
        swap(root->left, root->right);  //交换当前节点左右孩子节点 
        return root;
    }
};

递归法的中序遍历不行:

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) return root;
        invertTree(root->left); //处理左子节点  
        swap(root->left, root->right); //交换当前节点左右孩子节点 
        invertTree(root->right); //处理右子节点
        return root;
    }
};

用一个例子说明:

对比原先的树发现:2节点的孩子1,3翻转了两次,而对7节点没处理