- 博客(8)
- 收藏
- 关注
原创 二叉树 Part02
一般都是从下往上,即先假设子节点结果已知,在对父节点进行操作。当迭代法复杂的时候也可以考虑层序遍历。迭代法最重要的就是想清楚。(1)如1.在单层递归逻辑中涉及 root.left 和 root.right 时,必须判断 root == null(2)根据判断是否需要检查 root == null如果在调用递归函数之前已经确保传入的节点不为 null,那么在递归函数内部可以省略对 root == null 的检查。
2024-09-23 00:29:05
809
原创 二叉树part01
在中序遍历(左根右)中,节点的直接后继为右孩子,若右孩子存在再沿该子树的最左侧通路朝左下方深入,直到抵达子树中最靠左(最小) 的节点即可。若不存在,则直接后继为节点的父节点。在前序遍历中,节点的直接后继为左孩子,若不存在则为右孩子,若仍不存在则为父节点的右孩子(右兄弟节点)。(3)遍历以其右孩子(若存在)为根的子树,沿最左侧可见通路自顶而下,找到最深的节点,并将沿途节点即其右孩子都存入栈中。在后续遍历中,直接后继为右兄弟节点,若右兄弟节点存在则沿其最左侧可见通路遍历,若不存在则回溯至当前节点的父亲节点。
2024-09-05 02:44:50
888
原创 栈与队列part02 + 集合知识总结
题目链接逆波兰表达式=二叉树的后序遍历逆波兰表达式主要有以下两个优点:(1) 去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。(2) 适合用栈操作运算:遇到数字则入栈;遇到运算符则取出栈顶两个数字进行计算,并将结果压入栈中。✅(1)Java中判断字符串相等需要用equals方法,所以可以直接用token.equals(“+”)来判断。也可以像我一样利用char ch=token.charAt(0)将字符串转换成char。
2024-09-04 06:23:27
726
原创 链表part01
✅ 链表相关的题目,尤其是涉及到【增删改操作】最关键是要理解的使用技巧。复习时可做一下【2.设计链表】,进行全面的思考和回顾。而一些环形链表、公共节点问题,更多像是数学问题。
2024-08-05 10:49:41
388
原创 数组part01 + 数组知识总结
int[] ids;//声明//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行//类型推断在排序数组中查找元素的第一个和最后一个位置✅ 简单易懂的方法给定的是有序数组,很容易想到先通过二分法,否则暴力搜索的话就没有利用有序的这个特性。(1)通过二分法找到一个和target相等的元素。(2)再通过循环移动左右指针,寻找第一个和最后一个位置的位置。//二分法找到一个和target相等的元素break。
2024-07-31 22:30:55
963
原创 哈希表part02
区别于常见的3-sum、4-sum,四个数是存在于4个不同的数组中的,所以直接使用哈希法。(1)仅当第一个数字 a>target 时还不能结束返回result,因为有可能target是个负数,需再加上a>0或target>0的条件。(2)第二个数字b的剪枝,就不是结束返回result,只是break,同样需要加上target>0的条件。(3)选第二个b为左指针(初始化为第一个数字+1),第三个数字c为右指针(初始化为最右)。:当a>0时,b+c一定>0,不可能再出现三数和为0,直接返回结果。
2024-07-25 17:07:35
441
原创 哈希表part01
所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。想到需要判断的是当前数字的补数是否存在(是否遍历过),于是想到用哈希表存已遍历的元素。判断的是数字是否存在——>因为哈希表可以通过哈希函数快速判断一个元素是否出现集合里,所以key存数字。,而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。用同一个数组,一个字符串加,另一个字符串减,如果小于0则不符合。题目较为简单,注意返回数组的方式。
2024-06-26 23:50:29
560
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅