热门

最新

红包

立Flag

投票

同城

我的

发布
qq_41123745
qq_41123745
4 年前
trueqq_41123745

二叉树最近公共祖先:
自底向上:回溯
后序遍历一定是先遍历叶子节点
首先最容易想到的一个情况:如果找到一个节点,发现左子树出现结点p,右子树出现节点q,或者 左子树出现结点q,右子树出现节点p,那么该节点就是节点p和q的最近公共祖先。

但是很多人容易忽略一个情况,就是节点本身p(q),它拥有一个子孙节点q(p)。

使用后序遍历,回溯的过程,就是从低向上遍历节点,一旦发现满足第一种情况的节点,就是最近公共节点了。

但是如果p或者q本身就是最近公共祖先呢?其实只需要找到一个节点是p或者q的时候,直接返回当前节点,无需继续递归子树。如果接下来的遍历中找到了后继节点满足第一种情况则修改返回值为后继节点,否则,继续返回已找到的节点即可。为什么满足第一种情况的节点一定是p或q的后继节点呢?大家可以仔细思考一下。

CSDN App 扫码分享
分享
评论
1
打赏
  • 复制链接
  • 举报
下一条:
第一次上铁粉周榜,感谢大家的支持
立即登录