代码随想录算法训练营第二十六天|回顾 2月20日 ~ 2月25日学习内容

回顾总结一周

2月20日

654. 最大二叉树
本题思路没有那么好了,下次再复习回顾这道题的时候还要再做。

617.合并二叉树
能直接想到创建一颗新树来遍历对应相加。直接做出来。

700.二叉搜索树中的搜索
比较简单二叉搜索树的特性直接解决,牢记二叉搜索树的概念即可。

二叉搜索树的概念:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
它的左、右子树也分别为二叉搜索树

98.验证二叉搜索树
[2,2,2] 这个测试案例错了好几次,这一点强调了判断条件: pre->val >= root->val 很关键

2月21日

530.二叉搜索树的最小绝对差
递归函数不应该使用返回值,这里需要注意。

501.二叉搜索树中的众数
处理众数第一个节点的时候是 if (pre == nullptr) count = 1; 而不是 != ,这里需要注意。

236. 二叉树的最近公共祖先
短时间没有解决这道题,可能需要加强理解。(需要解决的)

2月22日

235. 二叉搜索树的最近公共祖先
比235那题简单些,因为二叉搜索树有序

701.二叉搜索树中的插入操作
还是对什么时候需要返回值不是很清楚,在本题中不熟练。

450.删除二叉搜索树中的节点
五种情况,在书写过程中注意递归三部曲别忘记了。最好是写着注释跟着走。

2月23日

669. 修剪二叉搜索树 (解决得不够顺)
一样的问题,思路不够明确,还是看注解完成的,后面还要重做本题,加强理解

108.将有序数组转换为二叉搜索树
注意new节点里面不是mid下标,而是mid下标对应得数组值,然后注意循环不变量。

538.把二叉搜索树转换为累加树
右中左的遍历递归过程。

2月24日

这一天主要是学习回溯算法,学习模板。

77. 组合
套模板 + 剪枝

2月25日

216.组合总和III
直接使用 n 来控制的时候,不要忘记对n<0的情况做剪枝

17.电话号码的字母组合(这道题一直做起来没感觉,都是靠题解过的,如果我还是做不出来就背下来吧)
理解本题后,要解决如下三个问题:

数字和字母如何映射
两个字母就两个for循环,三个字符我就三个for循环,以此类推,然后发现代码根本写不出来
输入1 * #按键等等异常情况

数字和字母如何映射:
可以使用map或者定义一个二维数组,例如:string letterMap[10],来做映射,我这里定义一个二维数组,代码如下:

const string letterMap[10] = {
    "", // 0
    "", // 1
    "abc", // 2
    "def", // 3
    "ghi", // 4
    "jkl", // 5
    "mno", // 6
    "pqrs", // 7
    "tuv", // 8
    "wxyz", // 9
};

回溯法来解决n个for循环的问题:

int digit = digits[index] - '0';        // 将index指向的数字转为int
string letters = letterMap[digit];      // 取数字对应的字符集
for (int i = 0; i < letters.size(); i++) {
    s.push_back(letters[i]);            // 处理
    backtracking(digits, index + 1);    // 递归,注意index+1,一下层要处理下一个数字了
    s.pop_back();                       // 回溯
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值