美文网首页
[Leetcode]226. Invert Binary Tre

[Leetcode]226. Invert Binary Tre

作者: beautymo | 来源:发表于2018-06-16 16:16 被阅读0次
    题目描述

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

    /**
     * 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;
    

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


    image.png

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

    相关文章

      网友评论

          本文标题:[Leetcode]226. Invert Binary Tre

          本文链接:https://www.haomeiwen.com/subject/yrebeftx.html