对于这一类的问题有2中解决方法。第一种就是tarjan的离线算法,还有一中是基于ST算法的在线算法。复杂度都是O(n); 先介绍在线算法: 1) dfs: 对于图所示的树,我们从根节点1开始dfs,按照先序访问(不算完全的先序),那么它访问顺序就是1 -> 2 -> 4 -> 2 -> 5 -> 7 ...
分类:
编程语言 时间:
2016-07-13 10:28:51
阅读次数:
139
有一个普通二叉树,AB分别为两个子节点,求AB最近(深度最浅)的公共父节点。
此题仍然是一个老题,有着多种解决方法,本文针对其中三种方法来进行分析总结。
这三种方法分别是:递归法,tarjan离线算法,RMQ在线算法。
递归法
递归法比较直观简单,思路如下:
首先判定当前节点root是否是A节点或者B节点,若是的话直接返回该节点
若不是,分别对root节点的左右子树进行递归查找最小公共...
分类:
其他好文 时间:
2015-07-19 13:36:58
阅读次数:
1468
原理讲解:http://dongxicheng.org/structure/lca-rmq/
在线算法模板:
/**
LCA在线算法O(nlogn)
主函数调用:
init();
tot=0,dir[1]=0;
dfs(1,1);
ST(2*n-1);
int lca=LCA(u,v);
*/
#include
#include
#include
#include
#inclu...
分类:
编程语言 时间:
2015-03-01 18:33:50
阅读次数:
168