刷题
刷题
learn
learn
日期
Sep 6, 2024 → Sep 7, 2024
- 普通二叉树上寻找两个节点最近的公共祖先
- 假设要求节点
p
和节点q
的公共祖先,一共有两种情况: - 包含关系:
p
自己就是q
的祖先,或者q
自己就是p
的祖先; 也就是p
在q
的子树上,或者q
在p
的子树上; p
和q
分属于两课子树
- 搜索二叉树上寻找两个节点最近的公共祖先
- 收集累加和等于 aim 的所有路径(递归恢复现场)
- 恢复现场:比如,当你来到状态A,接下来需要递归生成状态B、C、D,但是生成状态B后,仍然希望用状态A生成状态C、D的时候; 核心思想就是:进入这个分支的时候干了什么事情,出这个递归的时候就抹除掉改变;
- 验证平衡二叉树(树形dp沾边)
- 验证搜索二叉树(树形dp沾边)
- 打印中序遍历,判断是否是升序排列即可
- 修剪搜索二叉树
- 二叉树打家劫舍问题(树形dp沾边)
注意:
- 问题1又叫lca问题,非常重要的问题! Tarjan算法解决lca的批量查询、树链剖分算法解决lca的在线查询,在后续部分
- 数组的打家劫舍问题变形很多,会在后面动态规划具体讲解