幅優先探索と深さ優先探索について

  仮想設計DOMを作るために設計された最近のプロジェクトには、彼らは自然に仮想DOM /見つけるのノードを通過する必要性を避けることができないため、一般的な検索ノード二つの方法に過ぎないで - 幅優先探索と深さ優先探索私たちはデータ構造ツリートラバーサルで学んだ、これは実際には同じです。OK、それを見つけるためにこれらの2つの方法の私の理解について話をし、ADO。

  まず、幅優先探索次工程ように、特徴であるBFSは、最初のキューによって発見されたストレージノードにFIFO待ち行列に適用されます。

1  / * *
 2  * 
 3  * * @param {対象}:内部で検索するノード、宛先ノード、
 4  * @param {}プロパ:検索インデックス
 5つの *指数変性条件isLegal()内の
 6   * / 
。7  関数breadthSearch(ターゲット){
 8。      CONST nodelistと= [ターゲット];
 9      LETインデックス= 0 ;
 10      ながら(指数< nodeList.length){
 11。          CONST nodelistとノード= [インデックス++ ];
 12は、         IF(node.children && node.children .LENGTH> 0 ){
 13がある             ため(LET K node.children){
14                  nodeList.push(node.children [K])。
15              }
 16          }
 17      }
 18      リターン 機能{(プロプ)
 19          せtargetNodeList = [];
20          のために{(nodelistとのノードを聞かせて)
 21              であれば(isLegal(ノード、プロプ)){
 22                  targetNodeList.push(ノード)。
23              }
 24          }
 25          リターンtargetNodeList。
26      }
 27 }

  名前は、これが「最後に探る、」検索アルゴリズムであることを示唆しているよう深さ優先探索、DFS、続いて、それは最も深い一つのノードを検索して、順番にバックトラックの方法により、最も深い別のノードを発見されていたであろうサイクル。

  

1  / * *
 2  * 
 3  * * @param {対象}:内部で検索するノード、宛先ノード、
 4  * @param {}プロパ:検索インデックス
 5つの *指数変性条件isLegal()内の
 6   * / 
。7  関数depthSearch(ターゲット){
 8。      CONST nodelistと= [];
 9      CONST depthEach = 関数(項目){
 10          nodeList.push(項目)
 。11          IF (item.children){
 12である             ため(LET K item.children){
 13は                 depthEach(item.children [K]);
 14              }
 15         }
 16      }
 17      depthEach(ターゲット)
18      リターン 機能(プロパ){
 19          せtargetNodeList = [];
20          のために{(nodelistとのノードを聞かせて)
 21              であれば(isLegal(ノード、プロプ)){
 22                  targetNodeList.push(ノード)。
23              }
 24          }
 25          リターンtargetNodeList。
26      }
 27 }

 

おすすめ

転載: www.cnblogs.com/hmchen/p/11671445.html