链接
题解:

本题是要镜像反转二叉树,相当于从中间一分,然后把左子树和右子树对调,但又不是简单的对调,还要继续反转子树的子树,所以要用递归。
我们特判root是否为空(否则出现nullptr->nullptr的错误,模拟一下就知道了),然后交换左右孩子,交换完之后第二层就算是反转完了,然后我们反转以root->left为root的树,然后反转以root->right为root的树......
代码:
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(!root)return nullptr;
        swap(root->left,root->right);
        invertTree(root->left);
        invertTree(root->right);
        return root;
    }
};链接

 
 
 
如何得证?
 
 
 
 
因为我们想着是否可以推出:
 
 
而>=这个假设如何得证?
我们只需要假设它是严格小于的,然后退出矛盾后,大于等于就得证。
具体链接
代码:
class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int res = 0;
        if(matrix.empty())return 0;
        int m = matrix.size();
        int n = matrix[0].size();
        vector<vector<int>> f(m+1,vector<int>(n+1));
        for(int i = 1;i<=m;i++){
            for(int j = 1;j<=n;j++){
                if(matrix[i-1][j-1]=='1'){
                    f[i][j]=min(f[i-1][j],min(f[i][j-1],f[i-1][j-1]))+1;
                    res = max(res,f[i][j]);
                }
            }
        }
        return res*res;
    }
};注意:我们开了一个+1长的数组,方便处理i -1 j -1 这种边界问题,但是matrix应该从0 0 开始算起,所以我们if判断时减去1



















