LCA ing

转自:原地址

1. LCA转换到RMQ:

通过深度优先遍历得到:
数组E,保存遍历访问的每个节点号.
数组L:保存遍历访问的每个节点层(高度).
数组H:保存第一次访问某个节点的时候(即在E中的位置)

Range <wbr>Minimum <wbr>Query <wbr>和 <wbr>Lowest <wbr>Common <wbr>Ancestor <wbr>之间转换

这样我们就把LCA问题转换成了RMQ, 

比如查找节点9和节点12的最近共同父节点问题,

就变成了H[9]=10,H[12]=15,查找L数组中10到15中最小值位置.
 
 
2. RMQ转换到LCA

Range <wbr>Minimum <wbr>Query <wbr>和 <wbr>Lowest <wbr>Common <wbr>Ancestor <wbr>之间转换

我们可以把最小值作为根,把数组左边的作为左孩子,数组右边的作为右孩子,以此递归.
就可以得到下面的树,就转换为了LCA问题



Range <wbr>Minimum <wbr>Query <wbr>和 <wbr>Lowest <wbr>Common <wbr>Ancestor <wbr>之间转换

posted @ 2014-10-12 21:42  kewowlo  阅读(116)  评论(0编辑  收藏  举报