とは何ですか? 実生活では、柳、ポプラ、桃の木にかかわらず、木は私たちの生活のどこにでも見られると思いますが、木は抽象化されたものです。
以下に示すように
、階層構造のモデルになります。
たとえば、以下に示すように、会社の組織構造をツリーで表すことができます。
組織構造に加えて、家系図、州や都市などもツリー構造を使用して表現できます。
以下に示すように、ツリーには多くの用語があります。
n=0
の場合、ADH
;DOM ツリー、カスケード選択、ツリー コンポーネントなど、フロントエンドで最も一般的なデータ構造の 1 つであると言えます。JavaScript
はツリー データ構造を提供しませんが、使用できます。オブジェクトと配列を使用してツリーをシミュレートします。
たとえば、次のコード:
consttree = { 値: 'A'、 子供たち: [ { 値: 'B'、 子供たち: [ { 値: 'E'、子: null }、 { 値: 'F'、子: null }、 ]、 }、 { 値: 'C'、 子: [{ 値: 'G'、子: null }]、 }、 { 値: 'D'、 子供たち: [ { 値: 'H'、子: null }、 { 値: 'I'、子: null }、 ]、 }、 ]、
深
いわゆる深さ優先のトラバーサル アルゴリズムは、ツリーのブランチを可能な限り深く検索します。そのトラバーサル順序は次のとおりです。
実装のアイデアは次のとおりです。
children
の深さ優先トラバーサル (再帰) を続行します。実装
コードは次のとおりです。
console.log(root.value) root.children && root.children.forEach(dfs) // 以下と一致します // if (root.children) { // root.children.forEach(child => { //dfs(子) // }) // } } dfs(tree) //このツリーは以前に定義されたツリーです/* 結果 A B E F C G D H 私 */
ご覧のとおり、順序は画像と一致しています。これは、アルゴリズムに問題がないことを意味します。
いわゆる幅の優先順位は、ルート ノードに最も近いノードを順番に訪問することです。その走査順序は次のとおりです。
実装のアイデアは次のとおりです。
children
に実装コードは次のとおりです。
function bfs(root) { // 1. 新しいキューを作成し、ノードをキューに追加します const q = [root] // 4 繰り返し while (q.length > 0) { const node = q.shift() // 2 キューヘッドがデキューされました console.log(node.value) // チームのリーダーである 3 人の子供がチームに追加されます node.children && node.children.forEach(child => { q.push(子) }) } } bfs(ツリー) /* 結果 A B C D E F G H 私 */
ご覧のとおり、順序は画像と一致しています。これは、アルゴリズムに問題がないことを意味します。