この資料は、その中に挿入される任意の他の中間ノードがある場合、ノード数の隣接ノードであり、それは、このlengthマスト上にある最長のリンクタイプ属性を見つけるためにツリーのデータ構造を説明しますこれは、隣接しています。最も単純な例の一つは、接続される2つのノードがあり、ツリー構造であるが、ノードはその後もはやより5ために、型に接続されている場合、より多く5は、次に、ノードが接続できません。
図は次のとおりです。
際、このような隣接ノードを介しとしてノード間の接続は、接続のタイプ属性はつ以上のことはできませんです。図のノードは、タイプ属性を想定しており、すべての、接続ノード2.1と3.1は、ノードに接続することができるが、2.3との接続のための3.3とすることができないので、最長6.1との接続ノード、 5よりも長いです。他の背後に5.1タイプのノードに接続することができません。この長さの間にその接続がアルゴリズムを導入するには、この記事の内容ですが、前提条件が存在する、5つ以上であるかを判断するには。
まず、これらのノードの情報でなければなりませんが:このノードのID、親ノードのIDは、その子は、IDをノード、各ノードには、type属性を持って、このノードのノードをマークするものであり、すべてのノードに関する情報を取得する方法があります、 IDでのお問い合わせを促進します。
いくつかは、すべてのノードそれについての情報を得るためにどのようにして、と言うでしょうか?実際には、限り、あなたが作成するときのように、情報は、キー、キー値としての情報として、IDにするノードオブジェクトに格納されます。
次のようにオブジェクトに表されます:
ノード=定数{ ... // その他のノード情報 ID21:{ のnodeId:ID21、 タイプ: 'A' 、 parentNodeIds:{ のIDLL:trueに、 ID12:trueに、 }、 childNodeIds:{ ID31:trueに、 ID32:trueに、 } } ... // 他のノード情報 }
各ノードが変更(接続、接続を切断し、削除)が存在する場合には、作成時の情報の一部を保持しているノードの操作、およびデータを変更すると、簡単にノードが接続されているすべてのノードを取得することができます情報、種別情報、およびその他の情報は、それらに保存されています。あなたはノードタイプの種類を直接取得することができ、再接続ノードの後。
唯一のタイププロパティは、このアプローチの特定の値を持つノードの総数に対する適切なタイミングで隣接している見つけるために、もちろん、アイデアは、他の場所で使用することができます見つけるために、あなたは脳に穴を参照してください。
アップへのお問い合わせ後、接続時に接続された2つのノードは、すべてのタイプは、必要なフォローアップの計算を持っている、唯一のすべての場合でされていない場合は最初に考えのもと、私たちは、最初に決定することができますノードタイプに接続された層の隣接するリンクの最大数は少数で構成され、クエリの種類が最長数層からなるノードリンクに接続されて下方に隣接して存在し、後これら2つの値によって、5つ以上の長さがあるかどうかを判断します。そのためにコードを書くためのアイデアです。
上下クエリタイプタイプ使用アイデアは、ノードIDがそれを記録したタイプのすべての子ノードのノードを見つけることが最初のもので、同じであり、その後、これらの子のすべての子ノードがに取り出されるノード次の操作のために。ここで再帰を使用するように、再帰的な終了条件はノードのタイプであるサブタイプではない場合、再帰が上です。
直接擬似コードで:
関数statisticalNodeNumber(ノード1、ノード2){ CONST TYPE1 = node1.type。 constのタイプ2 = node2.type。 もし(TYPE1 === '' && TYPE2 === 'A' ){ CONST beforeNum = statisticalBeforeNodeNumber([node1.nodeId]、0 ); CONST nextNum = statisticalNextNodeNumber([node2.nodeId]、0 ); 返す beforeNum + nextNum> 5 。 } } 関数statisticalNextNodeNumber(ノード識別子、NUM){ 合計せ = NUMと、 nodeTypeIsAを聞かせて = []; 聞かせてchildNodeIdsの =[]; のConstノード =ノード; // 取得し、すべてのノード情報またはオブジェクトメソッド nodeIds.forEach((ヴァル)=> { const型 = ノード[ヴァル] .TYPE; IF(===タイプ'A' ){ / / 場合は、アレイnodeTypeIsA 0の長さかどうかを決意した後、次いで、アレイnodeTypeIsAに格納され、型であり // そうでない場合はゼロでは、これが合計数が1ずつ増加し、その後のすべてのタイプを削除することができる、ノードタイプの階層があることを示し子ノードとして // 階層があったノードのタイプでなくなるまで、コンピューティング・ノードで行わ ; nodeTypeIsA.push(ヴァル) CONST N-?=ノード[ヴァル] .childNodeIds Object.keys(ノード[ヴァル] .childNodeIds):[]; childNodeIds = [... childNodeIds、... N-]; } }); IF(nodeTypeIsA.length === 0 ){ 戻り、合計 } ++ 総; 戻りstatisticalNextNodeNumber(childNodeIds、合計); } 関数statisticalBeforeNodeNumber(ノード識別子、NUM){ せ合計 = NUM; せnodeTypeIsA = []; LETのbeforeNodeIdsの = [ ]; CONSTノード =ノード; // 取得し、すべてのノード情報またはオブジェクトメソッド nodeIds.forEach((ヴァル)=> { const型 = ノード[ヴァル] .TYPE; IF(===タイプ'' ){ nodeTypeIsA。プッシュ(ヴァル)。 CONSTをN- =ノード[ヴァル] .parentNodeIds?Object.keys(ノード[ヴァル] .parentNodeIds):[]。 beforeNodeIds = [... beforeNodeIds、... N]。 } })。 もし(nodeTypeIsA.length === 0 ){ 戻り総。 } ++ 総。 戻りstatisticalNextNodeNumber(beforeNodeIds、合計)。 }
上記の二つの機能の最も重要なアイデアが唯一の子ノードとしてノードの種類の種類、そしてプラス1の数、および後続の計算があるだけ階層、見つけるための階層に従うことです。2つの接続されたノードの隣接ノードタイプはどのように多くの数の最大値であるときに、あなたは見つけることができます。
これらは、私たちが手助けをしたい、コンテンツの共有です。