国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 深度優先與廣度優先Java實現代碼示例

深度優先與廣度優先Java實現代碼示例

2021-03-01 14:25nickTimer Java教程

這篇文章主要介紹了深度優先與廣度優先Java實現代碼示例,具有一定借鑒價值,需要的朋友可以參考下。

在編程生活中,我們總會遇見樹性結構,這幾天剛好需要對樹形結構操作,就記錄下自己的操作方式以及過程。現在假設有一顆這樣樹,(是不是二叉樹都沒關系,原理都是一樣的)

深度優先與廣度優先Java實現代碼示例

1、深度優先

英文縮寫為dfs即depth first search.

深度優先搜索是一種在開發爬蟲早期使用較多的方法。它的目的是要達到被搜索結構的葉結點(即那些不包含任何超鏈的html文件) 。在一個html文件中,當一個超鏈被選擇后,被鏈接的html文件將執行深度優先搜索,即在搜索其余的超鏈結果之前必須先完整地搜索單獨的一條鏈。深度優先搜索沿著html文件上的超鏈走到不能再深入為止,然后返回到某一個html文件,再繼續選擇該html文件中的其他超鏈。當不再有其他超鏈可選擇時,說明搜索已經結束。其過程簡要來說是對每一個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。對于上面的例子來說深度優先遍歷的結果就是:a,b,d,e,i,c,f,g,h.(假設先走子節點的的左側)。

深度優先遍歷各個節點,需要使用到堆(stack)這種數據結構。stack的特點是是先進后出。整個遍歷過程如下:

首先將a節點壓入堆中,stack(a);

將a節點彈出,同時將a的子節點c,b壓入堆中,此時b在堆的頂部,stack(b,c);

將b節點彈出,同時將b的子節點e,d壓入堆中,此時d在堆的頂部,stack(d,e,c);

將d節點彈出,沒有子節點壓入,此時e在堆的頂部,stack(e,c);

將e節點彈出,同時將e的子節點i壓入,stack(i,c);

...依次往下,最終遍歷完成,java代碼大概如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void depthfirst() {
    stack<map<string, object>> nodestack = new stack<map<string, object>>();
    map<string, object> node = new hashmap<string, object>();
    nodestack.add(node);
    while (!nodestack.isempty()) {
        node = nodestack.pop();
        system.out.println(node);
        //獲得節點的子節點,對于二叉樹就是獲得節點的左子結點和右子節點
        list<map<string, object>> children = getchildren(node);
        if (children != null && !children.isempty()) {
            for (map child : children) {
                nodestack.push(child);
            }
        }
    }
}
?//節點使用map存放

2、廣度優先

英文縮寫為bfs即breadth firstsearch。其過程檢驗來說是對每一層節點依次訪問,訪問完一層進入下一層,而且每個節點只能訪問一次。對于上面的例子來說,廣度優先遍歷的 結果是:a,b,c,d,e,f,g,h,i(假設每層節點從左到右訪問)。

廣度優先遍歷各個節點,需要使用到隊列(queue)這種數據結構,queue的特點是先進先出,其實也可以使用雙端隊列,區別就是雙端隊列首位都可以插入和彈出節點。整個遍歷過程如下:

首先將a節點插入隊列中,queue(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代碼大概如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void breadthfirst() {
 deque> nodedeque = new arraydeque>();
 map node = new hashmap();
 nodedeque.add(node);
 while (!nodedeque.isempty()) {
  node = nodedeque.peekfirst();
  system.out.println(node);
  //獲得節點的子節點,對于二叉樹就是獲得節點的左子結點和右子節點
  list> children = getchildren(node);
  if (children != null && !children.isempty()) {
   for (map child : children) {
    nodedeque.add(child);
   }
  }
 }
}
//這里使用的是雙端隊列,和使用queue是一樣的

總結

以上就是本文關于深度優先與廣度優先java實現代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:https://www.cnblogs.com/toSeeMyDream/p/5816682.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 91精品国产综合久久福利软件 | 欧美午夜影院 | 久久久久久久免费 | 欧美在线网站 | 久久久久久久国产精品视频 | 欧美三区 | 在线观看精品91福利 | 日韩中文一区二区三区 | 天堂av中文在线 | 欧美精品一区二区三区一线天视频 | av毛片| 亚洲第一成人在线视频 | 中国特级毛片 | 久久精品视频一区 | 日韩亚洲一区二区 | 成人av一区二区三区 | 奇米av在线 | 国产精选一区二区三区不卡催乳 | 国产精品自拍视频 | 国产亚洲精品精品国产亚洲综合 | 在线国产一区二区 | 中文字幕免费中文 | 亚洲精品一区二区三区蜜桃久 | 色婷婷网 | 一级片网址 | 91精品久久久久久久久久入口 | 黄色一级片在线观看 | 中国大陆一级毛片 | 欧美日韩电影一区二区 | 国产精品入口久久 | 午夜视频免费 | 日韩精品免费观看 | 精品一区二区三区视频 | 开心久久婷婷综合中文字幕 | 天天干夜干 | 含羞草www网址进入在线观看 | 亚洲精选一区 | 欧美大片黄 | 在线激情视频 | 久久精品久久久久久 | 色接久久|