在二叉树中找到两个节点的最近公共祖先
问题简述
给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
思路1:树形DP(后序遍历)
考虑判断结点 x 是否为 o1 和 o2 的最近公共祖先需要从左右子节点获取哪些信息;
has_o1
:是否存在 o1has_o2
:是否存在 o2ret
:是否已经找到最近公共祖先
然后根据子节点的以上信息,生成当前节点的这些信息,并返回;
详见代码;
思路2:路径对比(后序遍历)
记录从 o1 和 o2 到根节点的路径,找到两个路径上最后一个相同的节点;
因为是后序遍历,为了顺序比较所有祖先,可以考虑使用队列头插来保存节点;
Last updated