• LC101 对称二叉树


    本来尝试使用层次遍历,发现根本无法解决,原因是层序遍历没有左右子树的信息。
    递归也没什么思路,就直接参考官方题解

    递归解法

    将问题转化为两棵树什么情况下对称?

    • 两个根节点具有相同的值
    • 每个树的右子树和另一棵树的左子树镜像对称

    代码如下,值得注意的是下面的判断顺序可以实现先判断两者均为nullptr,两者有一个为nullptr,两者均不为nullptr

    class Solution {
    public:
        bool isSymmetric(TreeNode* root) {
            return check(root, root);
        }
        bool check(TreeNode* left, TreeNode* right){
            if(left == nullptr && right == nullptr)
                return true;
            if(left == nullptr || right == nullptr)
                return false;
            return left->val == right->val && check(left->left, right->right) && check(left->right, right->left);
        }
    };
    

    迭代

    这个解法是之前尝试的层次遍历的正确版本,解决了判断子树的信息
    通过引入一个队列,每次提取一对节点时,将左节点的左子节点和右节点的右子节点插入队列中,对称插入余下部分。

    class Solution {
    public:
        bool isSymmetric(TreeNode* root) {
            return check(root, root);
        }
        bool check(TreeNode* left, TreeNode* right){
            queue<TreeNode*> nodes;
            nodes.push(left);
            nodes.push(right);
            while(!nodes.empty()){
                left = nodes.front();
                nodes.pop();
                right = nodes.front();
                nodes.pop();
                if(left == nullptr && right == nullptr)
                    continue;
                if((left == nullptr || right == nullptr) || (left->val != right->val))
                    return false;
                nodes.push(left->left);
                nodes.push(right->right);
                nodes.push(left->right);
                nodes.push(right->left);
            }
            return true;
        }
    };
    
  • 相关阅读:
    一个体验好的Windows 任务栏缩略图开发心得
    扫脸动画
    ShimmerTextView
    201512-2 消除类游戏 (水题,暴力)
    CCF 201512-1 数位之和 (水题)
    UVa 557 Burger (概率+递推)
    CCF 201604-2 俄罗斯方块 (模拟)
    CCF 201604-1 折点计数 (水题,暴力)
    UVa 10213 How Many Pieces of Land ? (计算几何+大数)
    UVa 1641 ASCII Area (计算几何,水题)
  • 原文地址:https://www.cnblogs.com/imagineincredible/p/13323095.html
Copyright © 2020-2023  润新知