码迷,mamicode.com
首页 > 其他好文 > 详细

用dfs序维护树结构

时间:2015-08-14 21:27:03      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

给定一棵n个节点的树,m次查询,每次查询需要求出某个节点深度为h的所有子节点。


对于这个问题如果试图去对每个节点保存所有深度的子节点,在数据大的时候内存会吃不消;或者每次查询的时候去遍历一遍,当数据大的时候,时间效率会非常低。


此时如果使用dfs序维护树结构就可以轻松地解决这个问题。


作为预处理,首先将将树的所有节点按深度保存起来,每个深度的所有节点用一个线性结构保存,每个深度的节点相对顺序要和前序遍历一致。


然后从树的根节点进行dfs,对于每个节点记录两个信息,一个是dfs进入该节点的时间戳in[id],另一个是dfs离开该节点的时间戳out[id]。


最后对于每次查询,求节点v在深度h的所有子节点,只需将深度为h并且dfs进入时间戳在in[v]和out[v]之间的所有节点都求出来即可,由于对于每个深度的所有节点,相对顺序和前序遍历的顺序以致,那么他们的dfs进入时间戳也是递增的,于是可以通过二分搜索求解。

版权声明:本文为博主原创文章,未经博主允许不得转载。

用dfs序维护树结构

标签:

原文地址:http://blog.csdn.net/ccsu_001/article/details/47667587

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!