力扣
leetcode Writeup Record
108.将有序数组转换为二叉搜索树
数组构造二叉树,构成平衡树是自然而然的事情,因为大家默认都是从数组中间位置取值作为节点元素,一般不会随机取
701. 二叉搜索树中的插入操作
我们插入元素,不需要考虑调整,插入的时候就插在最后面就可以,因此会有三种可插入情况,其中一种必然可插入,另外两种可能可以插入。如果不可插入,那就进入递归中进行查询
501. 二叉搜索树中的众数
通用的方法是这里用到针对 map 或 unordered_map 容器的 value 进行排序,理论上只支持 key 的排序,即 map 本身是自动机械能 key 排序的。如果要进行 value 排序,就需要将其大包围 pair 放到 vector 中,然后利用 sort 的自定义排序函数的方式进行 value 的排序。如果是二叉搜索树,利用中序遍历再来看此树,就是相当于看有序的数组一样
530. 二叉搜索树的最小绝对差
如果按照前面提供的正确答案,而是 prev 节点 和 cur 节点比较就不会出错,因为在中序遍历下是有序的。而我的这份错误的代码的虽然也是中序,但是 prev 意指 父节点,而 cur 意指 孩子节点,这就无法完全遵循二叉搜索树的有序性,从而出错
654. 最大二叉树
我居然把 getMaxIndex 用二分法去实现,真是聪明反被聪明误,二分法只能处理有序,但是我为了找到下标,是不能把里面的元素进行有序的
237. 删除链表中的节点
之前是给 val ,因此删除节点需要找到待删除节点的前一个节点,但是这里直接给节点就不用这样了。这本质上还是将待删除的节点的值改为下一个节点的值,然后指向下一个节点的指向
112. 路径总和
这道题要注意题意,判断该树中是否存在 **根节点到叶子节点** 的路径,这条路径上所有节点值相加等于目标和 `targetSum` 。
226. 翻转二叉树
如果你明白二叉树就是多条链表,就明白在赋值之前,应该保存好要被修改的节点,来保证原始数据不会丢失
24. 两两交换链表中的节点
由于 second 比 first 快,哪怕是进入循环内,也要时刻保证在用 second 多级指向的时候(多次next),不再某个以 NULL 节点去 next,这在循环链表的时候务必谨记的
203. 移除链表元素
删除节点需要之前它的前一个节点。如果有可能删除头结点,那就需要虚拟头结点了
1235