大家好,我是十七,今天来和大家讨论一下树形结构数据的深搜和广搜。
对于树形结构,我们今天分为二叉树和多叉树来分别讨论。
首先咱们来探讨一下深度优先搜索和广度优先搜索的区别,深度优先搜索就是先把一个节点及子节点寻找完了,再去找下个同级节点;广度优先就是先找同级的,同级的节点找不到再找他们的子节点。
首先上二叉树的:
先来个二叉树的构造函数,如图所示:
class Node{
constructor(value){
this.value = value;
this.left = null;
this.right = null;
}
}
深度优先的思路是先在当前节点寻找,找不到就寻找该节点的子节点,如果没有在往下寻找,直到找到最后一层,找不到的话在找另一个同级节点。如代码所示:
function deepSearch(root,value){
//root 根节点,value 寻找的值
if(root === null || value === null) return false
if(root.value === value) return true
let left = deepSearch(root.left)
let right = deepSearch(root.right)
return left || right
}
广度优先搜索的思路是找完根节点的,然后再找他下一级全部的子节点,如果找不到则找子节点的下一级全部子节点,如代码