东哥的算法小抄——笔记(题解整理)

发布于:2022-07-26 ⋅ 阅读:(411) ⋅ 点赞:(0)

东哥自己的网站:https://labuladong.github.io/algo/

完整版-东哥的公众号:https://mp.weixin.qq.com/s/Rjzw-cacx448YMi0UH5Q4Q?scene=25#wechat_redirect

第一章 数据结构

三、二叉树

4. 序列化

[297] 二叉树的序列化与反序列化
DFS:
中序的反序列化不能用,因为不能确定root是左子树和右子树中间的哪一位。前序和后序可以写,后序是反过来写,因为能发现,根节点在最后面,反过来的话,就是根、右、左。

BFS:
层级遍历用到queue,因为queue可以前出后进,序列化和反序列化都用到queue,一个逻辑,取出父节点的同时放入两子节点。
未完

5. 后序

[652] 寻找重复子树
后序遍历能复原子树模样,序列化成字符串好比较不同子树,使用一个map放所有子树字符串,一个vector放符合答案的结点。

6. 归并排序

[912] 排序数组
归并排序:两个链表里各放一个指针,比较,谁小拿出来排队,然后指针后移。

[315] 计算右侧小于当前元素的个数
和[912]题类似,唯一区别在于vector tmp使用的是vector<pair<int,int>>类型,second位置放的是每个数的初始位置,为了写答案的时候定位。使用一个vector ans传回答案。

7. 搜索树BST(特性篇)

BST的中序遍历结果是升序的。

[230] 二叉搜索树中第K小的元素
解法并不是最高效的解法,而是仅仅适用于这道题。

[538] 把二叉搜索树转换为累加树

二叉树的通用思路:思考每个节点干什么。
BST问题的思考方向:1. 利用BST左小右大的特性。2. 利用中序遍历即升序的特性。

8. 搜索树BST(基操篇)

[98] 验证二叉搜索树
如果是正常的思路,每次验证只能管自己的左右子树,管不了孙子树,所以参数设置max,min传下去,就可以约束。

[700] 二叉搜索树中的搜索
ok

[701] 二叉搜索树中的插入操作
不要用return,return还要判断是左还是右,这种直接返回在=号后侧可以直接赋值。

[450] 删除二叉搜索树中的节点
删除的三种情况,最后一种:有左子树和右子树,需要找到右子树最小的结点,value赋值过去,然后删除这个最小结点即可(左子树同理,移动最大的结点)。

//二叉搜索树的模板
void BST(TreeNode root, int target) {
    if (root.val == target)
        // 找到目标,做点什么
    if (root.val < target) 
        BST(root.right, target);//root.right=BST(root.right, target);这种也可以
    if (root.val > target)
        BST(root.left, target);
}

9. 搜索树BST(构造篇)


网站公告

今日签到

点亮在社区的每一天
去签到