首页 > 编程知识 正文

深度系统可以开发java吗,java广度优先遍历

时间:2023-05-04 07:25:41 阅读:16304 作者:1138

在编程生活中,我们总是遇到树结构,这几天正好需要操作树结构,记录自己的操作方式和过程。 假设现在有这样的树。 (不管是不是二叉树。 原理是一样的。

1、深度优先

英语简称DFS,即深度第一搜索。

深度优先搜索是爬行动物开发初期常用的方法。 其目的是实现不包含已搜索结构的叶节点(即超级链)的HTML文件。 在HTML文件中,选择超链接后,链接的HTML文件将执行深度优先搜索。 也就是说,在搜索剩下的超链接结果之前,必须完全搜索各个链。 深度优先搜索将沿着HTML文件的超链接进行,直到无法再深入,返回到一个HTML文件,然后继续选择该HTML文件中的另一个超链接。 当无法选择其他超级链接时,搜索已结束。 简单来说,这一过程不会对每个可能的分支路径进行更深的挖掘,每个节点只能访问一次。 在以上示例中,假设作为深度优先遍历的结果,a、b、d、e、I、c、f、g、h .在子节点的左侧领先。

深度必须优先遍历每个节点,并使用堆这一数据结构。 stack的特点是先进的后起之秀。 整个遍历过程如下

首先将a节点推入堆中,堆叠(a );

一边弹出a节点,一边将a的子节点c、b推入堆中。 此时,b位于堆的上部,堆叠(b、c );

一边弹出b节点,一边将b的子节点e、d推入堆中。 此时,d位于堆的上部,堆叠(d、e、c );

弹出d节点,子节点未按下时,e位于堆的顶部,堆栈(e,c );

弹出e节点,同时推入e的子节点I,堆栈(I,c );

.依次向下,最终遍历完成。 Java代码可能如下所示。

公共语音深度第一(

堆叠节点堆叠=新堆叠(;

Map node=new HashMap (;

节点堆栈. add (node;

while (! nodeStack.isEmpty (

node=nodeStack.pop (;

system.out.println(node );

//获得节点子节点相对于二叉树是获得节点的左子节点和右子节点

list children=get children (节点;

if(Children!=空! children.isEmpty (

for (映射池:池ren ) {

节点堆栈. push (child;

}

}

}

}

//节点由Map保管

2、广度优先

英语中简称BFS=Breadthfirstsearch。 在过程检查中,依次访问各层次的节点,访问一个层次进入下一个层次,每个节点只能访问一次。 在上述示例中,宽度优先扫描的结果是: a、b、c、d、e、f、g、h、I (假定各层的节点从左向右访问)。

若要以宽度优先顺序遍历每个节点,必须使用名为“队列”(Queue )的数据结构。 队列的特点是先进先出,但实际上也可以使用两端队列。 区别在于,可以在两端队列的开头插入节点或弹出节点。 整个遍历过程如下

首先将a节点插入队列,然后返回队列(a;

弹出a节点的同时将a的子节点b、c插入队列中。 此时,b是队列的开头,c是队列的末尾,queue(b、c );

弹出b节点,同时将b的子节点d、e插入队列。 此时,c是队列的开头,e是队列的末尾,queue(c、d、e );

弹出c节点,同时将c的子节点f、g、h插入队列。 此时,d是队列的开头,h是队列的末尾,queue(d、e、f、g、h );

弹出d节点,如果d中没有子节点,则e是队列的开头,h是队列的末尾,queue(e、f、g、h );

.依次向下,最终遍历完成。 Java代码可能如下所示。

公共语音刀片第一个(

Deque nodeDeque=new ArrayDeque (;

Mapnode=new HashMap (;

节点deque.add (节点;

while (! nodeDeque.isEmpty (

node=nodeDeque.peekFirst (;

system.out.println(node );

//获得节点子节点相对于二叉树是获得节点的左子节点和右子节点

list children=get children (节点;

if(Children!=空! children.isEmpty (

for (映射池:池ren ) {

节点deque.add (child;

}

}

}

}

//这里使用的是双端队列。 和使用queue一样

总结

希望以上是本文所有深度优先和广度优先的Java实现代码示例,对大家有所帮助。 感兴趣的人继续参考本网站的其他相关主题。 如果有不足之处,欢迎评论。 感谢朋友们对本站的支持!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。