前置知识:数组实现队列、【入门】017~018 的 二叉树入门内容

特别说明

特别说明

题目1.普通二叉树上寻找两个节点的最近公共祖先

注意

著名的 lca 问题,非常重要的问题

  • Tarjan 算法解决 lca 的批量查询
  • 树链剖分算法解决 lca 的在线查询(不断增删节点)

会在【扩展】课程讲述

题目描述

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)”

测试链接

236.二叉树的最近公共祖先

答案

二叉树的最近公共祖先

题目2.搜索二叉树上寻找两个节点的最近公共祖先

二叉树的最近公共祖先

题目3.收集累加和等于 aim 的所有路径

测试链接

113.路径总和 II

思路

回溯:递归恢复现场

答案

二叉树路径问题

题目4.验证平衡二叉树(树型 dp 沾边)

题目描述

给定一个二叉树,判断它是否是高度平衡的二叉树。

平衡二叉树:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1

测试链接

110.平衡二叉树

答案

验证平衡二叉树

题目5.验证搜索二叉树(树型 dp 沾边)

题目描述

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数
  • 节点的右子树只包含 大于 当前节点的数
  • 所有左子树和右子树自身必须也是二叉搜索树

测试链接

98.验证二叉搜索树

答案

验证二叉搜索树

题目6.修剪搜索二叉树

题目描述

给你二叉搜索树的根节点 root ,同时给定最小边界 low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在 [low, high] 中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在 唯一的答案 。

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

测试链接

669.修剪二叉搜索树

答案

修改二叉搜索树

题目7.二叉树打家劫舍问题(树型 dp 沾边)

测试链接

337.打家劫舍 III

答案

打家劫舍系列

备注

数组的打家劫舍问题变形很多,会在【必备】课程的动态规划大章节部分讲述