将树结构变成一维数组,打破固有思维,取数据就变得很轻松

140 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

寻找切入点

树变成一维数组,通过数据结构的改变能够降低复杂度,在取数据的时候能够快速定位所需要元素的位置。

如何寻找切入点解决这个问题?

结合实际的常用场景去展示某一系列知识点的应用方法。

就是说我们不仅要解决「是什么」的问题,还要解决「为什么」「怎么用」的问题。

举个例子

工作中常常要处理分类导航树。如下图知乎会员的主页下的类目:

v2-fd8de4a09bb6ad512e2f03b052b7e2be_r.jpg

它背后的数据必然是一个有树性质的数据结构:

v2-a63084c56663f36d7da8ae65dcb43dd2_r.jpg

假设数据实体如下:

{
  "data":[
      {"title":"社科"},
      {"title":"成长"},
      {"title":"职人","children":[
        {"title":"创业必备"},
        {"title":"专业岗位"},
        ...
      ]},
      ...
    ]
}

如何快速找到一个节点和它的子父级节点。常规方法可能会使用嵌套循环递归通过判断条件得到结果。

当写两次for循环的时候,可以问一下自己还有更高效的方法吗?也就是说如何降低它的算法复杂度。常用的一种方式就是把节点打散,然后重新构造成一个一维数组,如下:

[{id:0,title:'社科'},{id:1,title:'成长'},{id:2,title:'职人',children:[...]},{id:3,parent:2,title:'创业必备'},{id:4,parent:'2',title:'专业岗位'},...]

从上面的数组中可以观察它的特点:

①id是对应元素所在的数组下标

②增加了parent属性,parent的值为对应父节点的数组下标

通过这种方式便能快速查找对应节点,并且时间复杂度为1。

碎碎念

很多同学「尤其是新手」会认为数据结构并不重要,甚至根本用不上。

但事实远远不是这样的。这也许是当前的业务快速更新迭代的环境给我们的误导。

很多书上和博客上一旦说到数据结构就是数据、集合、二叉树的侃侃而谈。

对于数据结构不熟悉的同学来说,很难去真正沉下心来去看枯燥的概念。

因为单纯的理论无法应用到实际的问题中,遇到实际的问题了又不知道怎么去使用这些理论。

这个例子就简单说明了数据结构和算法的务实落地的操作。可见数据结构并不是没有用,而是因为不了解,不知道怎么使用。