2020_12_16 LeetCode刷题

博主分享了2020年12月16日LeetCode的三道编程题,分别是单词规律、有序数组转换为二叉搜索树和判断平衡二叉树。对于每道题目,博主给出了思路和部分代码实现,其中前两题采用模拟和递归的方法,最后一题涉及树的深度计算。虽然遇到一些困难,但通过查阅题解得以解决,计划后续继续复习巩固。
摘要由CSDN通过智能技术生成

2020_12_16 LeetCode刷题

今天刷题三道,第一题是每日一题,之后两题是关于树,三道题目难度都是简单,目前想法按照难度顺序写,并且每道题目按照十五分钟的限制,如果超出时间没有完成,就查看题解,第二天再继续写。

290_单词规律
普通模拟,需要首先找出所有的单词并进行存放,之后按照模式串的形式,对单词串进行比对,查看是否符合条件。注意一点,两者的长度要相同,长度不同也算匹配失败。

class Solution {
public:
    bool wordPattern(string pattern, string s) {
        vector<string> words;
        bool flag = true;
        int len1 = s.length();
        int len2 = pattern.length();
        int num = 0;
        for(int i = 0;i < len1; i++) {
            string temp;
            while(s[i] != ' ' && i < len1) {
                temp = temp + s[i];
                i++;
            }
            words.push_back(temp);
            num += 1;
        }
        if(num == len2) {
        for(int i = 0; i < len2 ; i++) {
            for(int j = i + 1;j < len2; j++) {
                if(pattern[i] == pattern[j]) {
                    if(words[i] == words[j])
                        continue;
                    else {
                        flag = false;
                        break;
                    }
                } else {
                    if(words[i] != words[j])
                        continue;
                    else {
                        flag = false;
                        break;
                    }
                }
            }
            if(!flag)
                break;
            } 
        } else 
            flag = false;  
        return flag;
    }
};

108_将有序数组转换为二叉搜索树
递归回溯。一般简单的树形数据结构题目都是递归求解,这里今天没有完成,是查看题解完成的,明天继续复习。

/**
 * 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* sortedArrayToBST(vector<int>& nums) {
        int len1 = nums.size() - 1;
        return ArrayToBST(0,len1,nums); 
    }
    TreeNode* ArrayToBST(int s,int e,vector<int>& nums) {
        if(s > e) {
            return NULL;
        }
        TreeNode* ans = new TreeNode(nums[(s+e)/2]);
        ans->left = ArrayToBST(s,(s+e)/2-1,nums);
        ans->right = ArrayToBST((s+e)/2+1,e,nums);
        return ans;
    }
};

110_平衡二叉树
想到运用回溯法对于长度进行计算,但是在计算过程中,发现计算长度需要一个函数,然后返回匹配不相同需要再声明一个函数,陷入了迷茫,就十分的懵,然后卡壳了。也是查看题解完成,明天接着复习。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool isBalanced(TreeNode* root) {
        if(root == nullptr)
            return true;
        else {
            return abs(heightTree(root->left) - heightTree(root->right)) <= 1 && isBalanced(root->left) && isBalanced(root->right);
        }
    }
    int heightTree(TreeNode* root) {
        if(root == nullptr)
            return 0;
        else {
            return max(heightTree(root->left),heightTree(root->right)) + 1;
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值