关于广度优先搜索和深度优先搜索的一些自我总结:

1.从遍历方式来看:

1.广度优先搜索是层序遍历,优先遍历每一层的所有节点再依次遍历该层所有节点的每一个子节点。
2.深度优先遍历是优先遍历每一个节点的最左侧子节点或者最右侧子节点到达单侧子节点最深子节点才逐步遍历其他叶子节点与二叉树中先序遍历或后序遍历一致。

2.从代码书写来看(伪代码):

广度优先搜索:

function deep(root:tree[],name){
    if(root.length() >0){
	    let children = []
	    root,forEach(item=>{//这里顺序执行可以认为是按顺序出队
	        if(item.value==name)//优先遍历当前层级,找到立即返回结束查询 
		        return item
	        children.push(. . .item.children)//此处按顺序将当前层的所有子节点入队
        })
        return deep(children,name) //若当前层无匹配则进入下一层 ,
    }else{//未给定节点 及 查找结束
	    return null
    }
}

深度优先搜索:
 

function deep(tree,name){
	if(tree.children. length ()>0){
		tree.children.forEach(item=>{//此处循环可以认为是为每个子节点构建栈
            if(iteme.value == name)//当前节点匹配时提前
                return item
			let temp = deep(item))//此处利用递归特性形成栈的效果
			if(temp!=null) //某个节点有数据时 返回数据,结束查询
				return temp
        })
        return null //此处为某个深度的节点所有子叶都不匹配时
    }else{
	    if(tree.value == name)
	        return tree
        else
	        return null
    }

}

对比以上代码我们发现两者代码非常相似,都是通过递归遍历所有子节点来搜索匹配给定值,
但广度优先搜索在进入某一层时会先将该层节点完全比对完才会递归至下一层,而深度优先搜索则会在比对完一个节点后立即递归其子节点。就像横着切豆腐和竖着切豆腐一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值