226 Invert Binary Tree

Invert a binary tree.


4
/
2 7
/ \ /
1 3 6 9

to


4
/
7 2
/ \ /
9 6 3 1


解题思路

这道题是一道很明显的反转二叉树,将原先的左子树变为右子树(这不是废话嘛~)。
我们来递归考虑这一问题。首先,对于根节点,我们只需要将原值复制,再对它的孩子的情况进行判断,将左子树和右子树进行反转,接着对子树进行递归调用,就可以将整棵二叉树反转了。


代码

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL){
            return NULL;
        }
        TreeNode* res = new TreeNode(0);
        invertBinaryTree(root,res);
        return res;
    }
    
    void invertBinaryTree(TreeNode* root1, TreeNode* root2){
        root2->val = root1->val;//复制原值
        if (root1->left != NULL){
            TreeNode* one = new TreeNode(0);
            root2->right = one;
            invertBinaryTree(root1->left, root2->right);
        }
        if (root1->right != NULL){
            TreeNode* one = new TreeNode(0);
            root2->left = one;
            invertBinaryTree(root1->right, root2->left);
        }
        //左右子树调换并递归执行子树情况
    }
};

你可能感兴趣的:(226 Invert Binary Tree)