2020年3月做题记录

【不定时更新,赶论文,赶项目,1月~2月做题记录还在整理,自我训练】

反转链表

链接:https://leetcode-cn.com/problems/reverse-linked-list/
类名:
考察点:链表、迭代、递归
解题过程:
力扣3月每日1题,题解链接:
https://leetcode-cn.com/problems/reverse-linked-list/solution/di-2ci-da-qia-lian-biao-fan-zhuan-di-gui-by-wu-xi-/
就是记录当前的节点的前一个位置,改变当前节点指向的位置为访问的前一个节点,第一个节点指向null,最后个节点成了根节点。符合递归思想。递归和迭代都要考虑到如何记录前一个遍历的节点位置,迭代用临时变量保存,而递归则是参数列表中的1个参数保存。

二叉树中所有距离为 K 的结点

链接:https://leetcode-cn.com/problems/all-nodes-distance-k-in-binary-tree/
类名:
考察点: 树、递归、深搜、回溯
解题过程:
刚开始只考虑所求节点相等值的节点的左右子树,没考虑到当前节点的父亲节点方向。后来用个哈希表保存当前节点的父子节点,然后广度优先搜索当前节点的父亲节点、左右节点方向,由于搜索时需要回溯,避免走过的方向重复走,用set保存走过的节点,每次递归记录走的路径长度,直到走的长度与题目要求相等且当前节点值为题目要求的值,则当前遍历的子树根节点即为满足要求的节点。折腾了快2h,还是终于整出来了。虽然用时和内存 消耗感人。

用队列实现栈

链接:https://leetcode-cn.com/problems/implement-stack-using-queues/
类名:
考察点: 队列、栈
解题过程:
考虑栈的特点是先进后出,队列的特点是先进先出。所以选择用两个队列来模拟栈的行为。
始终维持一个队列为空,将空队列作为数据在另一个队列模拟栈行为的中转区域(不知道用什么词来描述)。
1、push:哪个队列为空,则插入到另一个队列中;
2、pop:将非空队列A的数据一个个取出放到空队列B中,当非空队列还剩最后1个元素时,就是栈顶元素,由于需
要移除该值,所以非空队列A的最后一个元素不放到原空队列B中;
3、top:和pop行为很像,唯一不同的点就是作为栈顶的元素只是取其值,而不用移除,因此选择用临时变量来
保存每次移动的值;
4、empty:判断两个队列是否为空即可。
力扣3月每日1题,题解链接:
https://leetcode-cn.com/problems/implement-stack-using-queues/solution/di-1tian-da-qia-by-wu-xi-4/

另一个树的子树

链接:https://leetcode-cn.com/problems/subtree-of-another-tree/
类名:
考察点: 树、递归
解题过程:还是得多做树相关的题。
树A,树B,判断树B是否是树A的子树,此处子树意思从A处某个节点断开形成的树节点个数与位置与树B相同。一步步来分析,遍历树A的每个节点,假设以每个节点作为根节点,判断以此节点 形成的左子树或者右子树是否与树B相同,判断的过程又是一次独立迭代,对以此节点为根节点的左右子树节点与树B对应的子节点做比较。

二叉树中的链表

链接:https://leetcode-cn.com/problems/linked-list-in-binary-tree/
类名:
考察点: 树、递归
解题过程:
和“另一个树的子树”解题几乎一模一一样。唯一需要注意的一点就是,当判断的树B为空,而待判定的树树A不为空时,应为真。

猜你喜欢

转载自www.cnblogs.com/ranh941/p/12398987.html