問題タブ [ordered-tree]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
neo4j - neo4j で順序付けられたツリーをモデリングする
私は neo4j を使い始めたばかりで、グラフと関係の原則は理解していますが、モデル化したい特定の構造に少し問題があります。プログラミング言語プロジェクトで使用し、解析されたソース ファイルの AST を保存したいと考えていました。そこから、ノードに多くの追加データと関係を追加して、分析とツールを支援する予定ですが、基本的な AST はまだ少し難しいです。
ツリーを作成する単純な方法は、単純に AST をたどり、ツリー内のすべてのノードを neo4j のノードにコピーし、プロパティを使用してトークン データなどを追跡し、CHILD 関係を使用して子ノードを指すことです。 . 問題は、後でツリーをトラバースしたいときに、元の AST の正しい順序でトラバースできるようにする必要があることです。
頭のてっぺんから考えている2つの基本的なアプローチがあります。1 つは、各 CHILD リレーションシップにインデックス/序数プロパティを追加することです。もう 1 つは、最初の子に対して FIRST 関係を持ち、各子の間に NEXT 関係を持ち、そのように順序を維持することです。
これらのアプローチのいずれについても、これを正しい順序でトラバースするためにすぐに使用できるものはまだないようです。FIRST/NEXT を実行すると、neo4j が常に FIRST を最初にトラバースし、深さ優先検索を実行するように強制する限り、正しい順序を取得できると思います。それはうまくいくでしょうか?より良い方法はありますか?これは、箱から出してすぐに簡単に処理できるように思われます。
アップデート
最終的に、私は両方のアイデアを使用することにしました。子ノードには、インデックス プロパティとの CHILD 関係があります。最初の子にも FIRST_CHILD 関係があります。兄弟ノードには、正しい順序付けを行うための NEXT_SIBLING 関係があります。その後、トラバーサルは簡単でした:
そして、実際に木を歩く必要があるとき、私はただすることができました
私のユースケースでは、作成後にツリー構造自体を実際に変更することはありません。分析を実行して関係とプロパティを追加するだけなので、これは簡単に維持できます。さらに変更を加える必要がある場合、特に子リレーションのインデックス番号を維持したい場合は、少し手間がかかるかもしれません。ですから、同様の状況にある他の誰かのために考慮すべきことかもしれません.
もっと変更可能なものに取り掛かるとしたら、Peter Neubauer が提案したコレクションを試して、ノードを指し、子の List コレクションを使用する OrderedTreeNode クラスを作成するだけでしょう。
algorithm - 任意に順序付けられたツリーが与えられた場合、その要素の任意のセットの最初と最後の要素を見つけるにはどうすればよいですか?
TreeItems で構築されたツリーがあります。各 TreeItem には次のメソッドがあります。
このツリーの TreeItems の順序付けられていないセットもあります。このセットの最初の要素と最後の要素をすばやく見つけたい。
何か賢いアイデアはありますか?
java - ツリーの構築と順序通りのトラバーサル: > 2 人の息子
Access データベースからメンバーのリストを読み込む必要があります。各メンバーは、別のメンバーによって後援されました。各レコードには、スポンサーの ID と独自の ID が含まれています。私は今、会員名簿を効率的に読み込んで、誰が誰によって後援されたかを示すために字下げして印刷できなければなりません。
これを行う最も効率的な方法は、ツリーを構築してから、順不同のトラバーサルを行うことだと思います。
私の出力は次のようになります。
ご注文はID番号順となります。私が見つけたものはすべて、右と左の息子だけを持つ二分木です。ご覧のとおり、これは私にはうまくいきません。
推奨される解決策は Java ですが、私が入手できるものは何でも感謝します。
ボニー
algorithm - 3 つのノードを持つ順序付けられたツリーの総数
私はインターネット上でさまざまな答えを得ています
- https://in.answers.yahoo.com/question/index?qid=20100508110438AAbKyMj
- http://wiki.answers.com/Q/How_many_ordered_trees_are_possible_with_3_nodes?#slide=2
私もSOで質問を見ましたが、あまり役に立ちませんでした
答えは何ですか?
また、これは木ですか?
/li>
c - Cでノードの数を制限するバイナリツリーの昇順/降順を出力します
二分木から出力されるノードの数を制限するのに問題があります。私は現在のコードを持っています:
abp.h
abp.c
main.c
最初のアイデアはstatic int x = 0;
、and のインクリメントの中に何かを入れることでしたcentralEsquerda()
が、2 番目の再帰的な call( centralEsquerda(a->dir, lim)
) が原因で、正しく動作しません。テストされたコードの下:
BTree は、すべての BTree と同じように、左が下、右が大きいという順序になっています。昇順で印刷するには関数 を使用しcentralEsquerda()
、降順で印刷するにはcentralDireita()
、再帰呼び出しを逆にするだけで、正しいノードを最初に呼び出します( a->dir
)。
したがって、上記のコードでは、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、および使用したいのですが、1、2、3、4、5 と表示されますcentralEsquerda(node, 5)
。
何か案は?ps。queue/list を使いたくない
[アップデート]
以下のコードで解決しましたが、満足できませんでした...
neo4j - Neo4j 順序付けツリー
親に 0 個以上の子があり、子に 1 つまたは 0 個の親がある階層ツリー構造で作業しています。特定の親の直接の子のリストをクエリすると、クエリは子をランダムな順序で返します。子を作成または更新するときに、定義した順序で子を返す必要があります。
私は子の間の関係を追加しました -[:Sibling]-> そのため、「上」の兄弟は着信 :Sibling 関係のみを持ち、「下」の兄弟は発信関係のみを持ちます。
これを考えると、子供を兄弟順に返す Cypher クエリはありますか?
各子とその兄弟を返すクエリがありますが、正しい順序でリストを返すコードを記述する必要があります。
別の方法として、各子ノードにソート番号を追加することもできます。そのうちの 1 つが順序を変更した場合、すべての子に対してこれを更新する必要があります。このアプローチは、グラフ データベースの概念とは少し異なります。
この問題が以前に発生したことがある場合、プログラムで解決するための標準アルゴリズムはありますか?
アップデート1
ブルーノが要求したサンプルデータ
(parent1)
(child1)-[:ChildOf]->(parent1)
(child2)-[:ChildOf]->(parent1) (child2)-[:Sibling]->(child1)
(child3)-[:ChildOf]->(parent1) (child3)-[:Sibling]->(child2)
その順序でchild1、child2、child3を返す暗号クエリはありますか?
そうでない場合、順序付けはプログラムで行うことができます
リレーションシップの代わりにプロパティを使用する
(parent1)
(child1)-[:ChildOf]->(parent1) (child1:{order:1})
(child2)-[:ChildOf]->(parent1) (child2:{order:2})
(child3)-[:ChildOf]->(parent1) (child3:{order:3})
子の順序を更新できる暗号クエリがあるとは思いません。
Update2
私は今、正しい順序で子を返す次のクエリにたどり着きました
このクエリは、-[:FirstChildOf]->(parent) 関係の追加に依存します。
他に聞こえない場合は、これを答えに設定します。
ノードを順序付けられたリストに挿入するための暗号クエリはないと仮定しますか?