Skip to content

十一、链表、二叉树与回溯

About 1430 wordsAbout 5 min

algolinklist

2024-01-25

分享丨【题单】链表、二叉树与回溯(前后指针/快慢指针/DFS/BFS/直径/LCA/一般树)

一、链表

1.1、遍历链表

21. 合并两个有序链表

leetcode 第 21 题,合并两个升序的链表,用一个虚拟节点和两个移动指针来解决,判断指针处的节点的大小,插入到虚拟节点后方

86.分割链表

23. 合并 K 个升序链表

这里用到一个二叉堆的数据结构, 先明白如何用,再说是怎样实现的, 就是使用一个优先级队列来处理,先把条件给出来的链表放到优先级队列里面,后面每次在 pull 出来最小的节点,放到虚拟节点的后面。

二、二叉树

2.7、回溯

257. 二叉树的所有路径(20250405)

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

自顶向下递归求解

可能你会问,什么时候使用递归?什么时候使用回溯?

递归是一个函数不断调用自身,通常用于把大问题拆解成小问题并逐步求解;回溯是在递归的基础上,尝试所有可能的解,并在不满足条件是回退,撤销上一步决策。

四、回溯

4.1、入门回溯

回溯算法套路①子集型回溯【基础算法精讲 14】

17. 电话号码的字母组合(20250405)

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

用一个path数组记录路径上的字母。

回溯三问:

  • 当前操作?枚举path[i]要填入的字母
  • 子问题?构造字符串>=i的部分
  • 下一个子问题?构造字符串>=i+1的部分
Java

4.2、子集型回溯

有【选或者不选】和【枚举选那个】两种写法。

也可以用二进制枚举做。

78. 子集(20250405更新)

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

方法一:输入的视角(选或者不选)

Changelog

5/7/25, 10:15 AM
View All Changelog
  • 8c7c5-feat(wiki): java: 基本数据结构源代码on

求求了,快滚去学习!!!

求求了求求了,快去学习吧!

【题单】贪心算法

不知道方向的时候,可以多看看书,书会给你指明下一步该干什么,加油!