LeetCode236.最近的公共祖先

LeetCode236.最近的公共祖先_第1张图片

求解最近公共祖先的算法

分为两个步骤:

  1. 求出两节点路径
  2. 取两路径上最后一个相同的节点(该节点即为p,q节点的最近公共祖先)

节点路径的算法设计与实现

求节点路径即输入二叉树根节点与待求节点返回根节点到该节点路径上的所有节点。

具体有如下几个要点:

  1. 我们需要设置一个栈,存储最终的节点路径。找到该节点时,从栈底到栈顶存储的节点即为从根节点到该节点的路径。
    LeetCode236.最近的公共祖先_第2张图片
  2. 需要通过遍历算法,从根节点遍历至该节点。树的遍历算法可以是递归的深度优先搜索算法。找到该节点后就结束搜索。
    LeetCode236.最近的公共祖先_第3张图片
  3. 将遍历过程中遇到的节点按照顺序存储到栈中。节点遍历完成之后需要弹出栈,从而保证栈中存储的节点时根节点到当前遍历节点路径上的节点。
    LeetCode236.最近的公共祖先_第4张图片
    LeetCode236.最近的公共祖先_第5张图片
    LeetCode236.最近的公共祖先_第6张图片

具体代码

深度优先搜索寻找路径上的节点

利用两节点的路径寻找最近公共祖先


LeetCode236.最近的公共祖先_第7张图片

测试主程序

LeetCode236.最近的公共祖先_第8张图片
LeetCode236.最近的公共祖先_第9张图片
参考资料
算法与数据结构,二叉树,程序员面试高频题,最近的公共祖先

你可能感兴趣的:(数据结构,算法,数据结构,图论)