树的深度优先遍历算法,js复杂树形结构的遍历算法

  树的深度优先遍历算法,js复杂树形结构的遍历算法

  本文给大家带来了一些关于javascript的知识,主要介绍了JavaScript树结构的深度优先算法。树形结构可以说是前端最常见的数据结构之一,比如DOM树、级联选择、树形组件等。下面就一起来看看吧,希望对你有所帮助。

  【相关推荐:javascript视频教程,web前端】

  

什么是树

  在现实生活中,相信大家对树都很熟悉,不管是柳树、杨树还是桃树。可以说,在我们的生活中,树随处可见;在计算机世界里,树是一种分层结构的抽象模型

  如下图所示:

  树结构的应用有很多,就比如公司的组织架构,就可以用树来表示,如下图:

  除了组织结构,如家谱,省市可以用树形结构表示。

  

树的术语

  树有很多的术语,如下图:

  :n(n0)个节点的有限集,当n=0时,称为空树;节点的节点的度:子树个数,比如节点B的度是2,节点A的度是3;树的度:树的所有节点的最大度。比如上图中,树的度是3;叶子节点:度为0的节点,也叫叶节点;子节点:如上图;兄弟节点:如上图;根节点:如上图;树的深度:所有结点中的最大层次在树中,比如上图中树的深度为3;节点的层次:比如E节点的级别是3,节点的级别是父节点层次+1,根节点的层次为1;路径:一个节点到另一个节点的通道。比如AH的路径是A D H;路径长度:一个节点到另一个节点的距离比如AH的路径是3。

JavaScript中的树

  树形结构可以说是前端最常见的数据结构之一,如DOM树、级联选择、树形组件等。

  JavaScript没有提供树形数据结构,但是我们可以通过对象和数组来模拟一棵树。

  例如下面这段代码:

  常数树={

  值: A ,

  儿童:[

  {

  值:“B”,

  儿童:[

  {值: E ,子级:null },

  {值: F ,子级:null },

  ],

  },

  {

  值: C ,

  children: [{ value: G ,children: null }],

  },

  {

  值:“D”,

  儿童:[

  {值: H ,子级:null },

  {值: I ,子级:null },

  ],

  },

  ],

  }

广度优先和深度优点遍历算法

  

深度优先

  所谓的深度优先遍历算法,就是尽可能深的去搜索树的分支,它的遍历顺序如下图:

  实现思路如下:

  访问根节点;对根节点的子节点继续深度优先遍历(递归);实现代码如下:

  函数dfs(根){

  console.log(root.value)

  root . children root . children . foreach(DFS)//与以下内容一致

  //if (root.children) {

  //root . children . foreach(child={

  //dfs(子级)

  //})

  //}

  }

  Dfs(tree) //这个树就是前面定义的树。

  /*结果

  A

  B

  E

  F

  C

  G

  D

  H

  我

  */如你所见,与图中顺序一致,说明我们的算法没有问题。

  

广度优先

  所谓的广度优先就是依次访问离根节点近的节点,它的遍历顺序如下图:

  实现思路如下:

  要创建队列,请将根节点入队。让组长出队,参观;把排在队伍最前面的孩子依次放进队伍里;重复步骤2和3,直到队列为空。实现代码如下:

  函数bfs(根){

  //1.创建一个新队列,并使用该节点加入团队。

  const q=[root]

  //4重复执行

  while (q.length 0) {

  Const node=q.shift() //2组长离队

  console.log(节点.值)

  //3个组长孩子依次入队。

  节点.子节点

  node.children.forEach(child={

  q.push(儿童)

  })

  }

  }

  树

  /*结果

  A

  B

  C

  D

  E

  F

  G

  H

  我

  */如你所见,与图中顺序一致,说明我们的算法没有问题。

  【相关推荐:javascript视频教程,web前端】以上是一篇关于掌握JavaScript树结构深度优先算法的文章的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: