問題タブ [tree-traversal]
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.
excel - EXCEL - リスト内の値を検索し、対応する複数の値を返す
私が持っているスケジュールのために Excel でツリー トラバーサルを作成しようとしています。各 1006 セルの長さのリストが 2 つあるところまで来ました。前者は前任者、後者は後継者です。一連の関数を使用して複数の結果を表示しようとしています。たとえば、3 と入力すると、タスク 3 のすべての後続タスクがリストされます。これまでのところ、私が思いついたコードは次のとおりです。
しかし、先行者を入力すると、正しい後続者が表示されません。
私を助けることができる人は誰でも事前に感謝します
php - 幅優先探索を使用せずに、二分木のレベルkでノードの数を見つける方法は?
この二分木が与えられた場合(実際には、二分木はランダムで動的である可能性があります。これは単なる例です...):
二分木の画像のリンクを参照してください:二分木の例
これは与えられた事実です:
- すべてのノードは、下から上に(そしてもちろん上から下にも)トラバースできるように、それらの父親に接続されています。
- すべてのノードは、左右の部分に子孫がいくつあるかに関する情報を保持しています。
問題はこれです:レベル2のノードの総数を計算する方法を見つける必要があります(実際には、どのレベルでも、今のところはレベル2に集中しましょう)。明らかに、二分木の構造を事前に知っていれば答えは3ですが、このイメージはなく、与えられた事実だけがあると仮定します。
ここでのもう1つの問題は、ルートではなくレベル2(ターゲットレベル)にあるノードから開始することです。この例では、NODEFを選択しました。
幅優先探索を使用するのが簡単な解決策であることは知っていますが、ノードを読み取るたびにデータベースからクエリを実行するため、時間がかかりすぎることがわかります。
より実用的なアプローチを探しています。しかし、与えられたデータが不十分であるためにこの問題を解決することが「不可能」である場合、これを解決するために他にどのようなデータを与えるべきかを教えてください。可能であれば評価します。
ちなみに私はPHPとMySQLを使ってウェブサイトを作っています。しかし、プログラミングスニペットやコードではなく、アルゴリズムのような、ソリューションの概念または説明だけが必要です...
誰かが私に答えてくれることを願っています...どうもありがとうございました!
java - Javaでバイナリツリーのノードを編集します
わかった。私は二分木を持っています、そしてこれは私がそれでやりたいことです:
元のツリーの各ノードの場合:リーフでない場合は、リーフノードに置き換えます。削除されたブランチで更新された元のツリーで計算を実行します。ノードを元の状態に戻します(したがって、ツリーは最初と同じになります)。
問題はこれです:私はスタックを使用してツリーをトラバースしています。stack.pop()ノードをリーフに変更しても、元のツリーのブランチは削除されません。それはあなたができる理由の背後にある同じ理由です:
そして、xはまだ1に等しいです。これには専門用語がありますが、私はそれを忘れました。
では、元のツリーのノードを編集して、それをトラバースするにはどうすればよいですか?
これは基本的に、私が今ツリーをトラバースするために行っていることです。
graph - Neo4J を使用した有向ツリーの一般的なトラバーサル
グラフ データベース Neo4J を使用して有向木構造をモデル化しました。だから私はこのようなものを持っています: http://ouwarovite.net/YAPC/220px-Binary_tree.svg.png (必須のバイナリではありません)
私のデータベースのユーザーは、既存のノードの子ノードを自由に追加できるため、ツリーの高さと単一ノードの次数は不明です。
ここで、ツリーを次のようにクエリしたいと思います。ノード x から始めて、葉 x の子孫であるすべての葉を教えてください。
この種のクエリは Gremlin または Cypher で実行できますか? もしそうなら、どのようにすれば最大のパフォーマンスを達成できますか? (常に最大深度を指定する必要があるため、「ジェネリック」ツリーでクエリを実行する可能性は見つかりませんでした)
REST / JSON フレームワークと Java API を使用すると、次のようにできることはわかっています。
(私の葉にはプロパティ 'leave' があり、私の端にはタイプがありません -> だから _default)
おそらくパフォーマンスが向上する、これを行うためのより簡単な/より良い方法はありますか?
neo4j - Neo4Jでツリー構造をトラバースするときの代替モデリングとパフォーマンス
Neo4Jグラフデータベースを使用してツリー構造をモデル化しました。すべてのノードは、特徴的な名前のカテゴリを表します。そのため、ルートから特定のノード/カテゴリまでツリーを頻繁にトラバースする必要があります。どのノードに入力として来るリストに依存します。このリストには、ルートからターゲットノードまでのカテゴリの名前を表す文字列が含まれています。
特定のノードのnameプロパティではなく、エッジのタイプとしてこれらの名前を格納することが効果的かどうか疑問に思います。そうすることで、Neo4Jは、ツリーをさらに深く進むたびに、すべての子ノードの適切なnameプロパティを探す必要がないと思いました。代わりに、Neo4Jは、発信エッジを含むマップ内の名前を検索できます。
どう思いますか?
.net - C# で任意のノードから始まる一般的なツリー構造をたどる
深さ優先と幅優先の両方のトラバーサル順序で、任意のツリーのツリー トラバーサル アルゴリズムが必要です。注意が必要なのは、任意のノードから開始して、別の特定のノードを通過するまで継続できる必要があることです。
これで、通常のアルゴリズムのいずれかを使用して、開始ノードに到達するまでトラバースされたノードを無視し、終了ノードまで続行できます (現在はそうしています) が、これは見苦しく非効率的です。
何か提案があればお願いします。
更新: 各ノードには ID が関連付けられています。場合によっては、開始ノード参照と終了ノード参照を用意します。それ以外の場合は、2 つの ID が与えられ、指定されたノードが開始ノードであるか終了ノードであるかを、それらの ID を調べて確認します。深さ優先トラバーサルを使用して、開始ノードを見つけます。開始ノードと終了ノードはどちらも、階層内のどこにでも配置できます。開始ノードと終了ノードの両方への参照が既に与えられている場合、誰かがアイデアを思い付くことができることを願っています。ところで、ツリー内のノードは実際にはソート順に従ってソートされます。ソート順は、ノードのサブノードごとに 0 から始まり、ルート ノードが 1 つあります。
search - BST インオーダー トラバーサルを実装する方法は?
実際、私が知りたいのは、BST のインオーダー トラバーサル アルゴリズムを実装する方法ではなく、BST の挿入、削除、事前順序トラバーサル アルゴリズムのみを使用して実装する方法です。
挿入、削除、事前注文トラバーサルのための標準 BST アルゴリズムの実装が与えられていると想定できます。
algorithm - 2 つのノードを交換するツリー トラバーサル
この問題に遭遇したばかりで、正しい解決策を思いつくことができるかどうか疑問に思っていました. この問題は、バイナリ ツリーの 2 つのノードを値だけでなくノードごとに交換することに関係しています。つまり、左右の値も変更する必要があります。
上の画像のような二分木があるとしましょう。私が最初に考えたのは、ツリーを平坦化し、要素を交換して、交換されたリストからツリーを再構築できるように、ノードの順序通りのトラバーサルを行うことでした。文字通り、解決策は次のようになります
上記のツリーの場合、インオーダー トラバーサルは次のようなリストを生成します。
1,3,4,6,7,8,10,13,14.
今度は 8 と 13 を交換します。
=> 1,3,4,6,7,13,10,8,14
しかし、ここでの問題は、特定のノードが左のサブチャイルドであるかどうか、またはそれがルート。したがって、文字通り、スワップされたノードを使用した最初と同じようにツリーを再生成することはできません。
問題は、各ノードの位置情報を保持するようにトラバーサル アルゴリズムを変更して、要素を交換して再構築するときに、目的のノードが交換された同じバイナリ ツリーを作成できるかどうかです。順序通りのトラバーサル中に個々のノードの状態/位置を保存できますか?
PS。ポストオーダーを行うと、最初と最後のノードがスワップされるリストが作成されることを認識していますが、スワップする必要がある 2 つのノードは、必ずしもルートと右端の要素にある必要はなく、任意の 2 つにすることができます。
python - lxml.etree のリバース ツリー トラバーサルはどこで探すべきですか?
実行したいトラバーサルの正確なタイプの名前はわかりませんが、基本的には、現在の要素とは逆の順序でドキュメント要素を要素ごとに読み取りたいと考えています。
iterdescendants()
メソッドは何もしていないように見えます。また、メソッドiterancestors()
はサブ要素に足を踏み入れず、ステップアップしてステップアウトするだけです。
java - 二分木探索中にノードをスキップする
条件が満たされたノードの子をスキップして、バイナリ ツリーをトラバースする必要があります。
これは、ツリー ガイド クラスタリング アプローチを実装します。サブツリーの葉は、集合的に条件を満たしている場合にクラスターと見なされます。
開始する場所は事前注文トラバーサルのようですが、現在のノードのすべての子をスキップするようにアルゴリズムを変更する方法がわかりません。
アップデート
以下の 2 つの (正しい) 回答に加えて、次の Java ライブラリを使用できます。
- MyArch TreeIter - 子のスキップと動的最大トラバーサル深度を備えた汎用 (アダプター クラスを使用) ツリー トラバーサル
- Phylosoft Forester
getAllExternalDescendants
- Newick から XML へのコンバーターを使用したツリー実装