[Leetcode]226. Invert Binary Tree

[Leetcode]226. Invert Binary Tree_第1张图片
题目描述

解释:就是把一棵二叉树的左子树和右子树不停交换,还是挺简单的,代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root == NULL) return NULL;  //对应空树的情况
        if(root->left == NULL && root->right == NULL) return root; //触底返回
        if(root->left != NULL || root->right != NULL){
            invertTree(root->left);
            invertTree(root->right);
// 开始交换,即使有一遍兄弟为空,也要交换过去
            TreeNode * node = root->left;
            root->left = root->right;
            root->right = node;
        }
        return root;
    }
    
};

易错:

如果把交换的那部分代码写成这样,那么它只是交换了值,而非交换整个节点,会出错
        int i = root->left->val;
        root->left->val = root->right->val;
        root->right->val = i;

此时那棵交换后的树是这样的:


[Leetcode]226. Invert Binary Tree_第2张图片
image.png

出现的问题是1,3的双亲本来是2,现在变成了7,,9,6的双亲本来是7,现在变为2,也就是说孩子节点并没有跟着双亲节点走,所以不能只交换数字,而需要交换节点。

你可能感兴趣的:([Leetcode]226. Invert Binary Tree)