leetcode-160
LDK Lv5

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

题目描述:二叉树的最近公共祖先

方法

  1. 递归

    递归遍历整棵二叉树,定义 f(x) 表示 x 节点的子树中是否包含 p 节点或 q 节点,如果包含为 true,否则为 false。那么符合条件的最近公共祖先 x 一定满足如下条件:

    1
    (f(lson) && f(rson)) ∣∣ ((x = p ∣∣ x = q) && (f(lson) ∣∣ f(rson)))

    其中 lsonrson 分别代表 x 节点的左孩子和右孩子。

    上述条件比较复杂,分析以下就是:

    • f(lson) && f(rson):
      表示节点 x 的左子树中包含p节点或者q节点,同时x的右子树中也包含p节点或者q节点。因为是 && 的关系,所以一定是左右分别有p或q中的一个。

      此时x一定是p和q的最近公共祖先

    • (x = p ∣∣ x = q) && (f(lson) ∣∣ f(rson)):
      这个布尔表达式很直观:节点x是p或者q中的一个,同时x
      的左右子树中包含p或者q中的另一个。

  2. 存储父节点

题解代码

递归
1

存储父节点
1

由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 81.2k 访客数 访问量