すべての要素が異なる場合、BSTで最も近い共通祖先を見つけるのはかなり簡単です。しかし、値のいくつかが同じであればどうでしょうか。これまではノードのデータを比較していましたが、それはそれでしたが、値の代わりにノードのアドレスをチェックする必要がありますか?バイナリ検索ツリー内の最も低い共通祖先
2
A
答えて
1
はい、代わりにkey
を使用する代わりに、比較のために(key, address of node)
を使用してください。これにより、一意でないキーを扱うときにコードが単純化されます。
0
使用している構造体の種類を見ることなく、それは詳細を与えるのは難しいですが、あなたは、この擬似コードのような何かを試みることができる:ここ
struct BST {
struct BST* parent;
struct BST* left;
struct BST* right;
void* value;
}
find_common_ancestor(struct BST* x, struct BST* y)
{
set<struct BST*> ancestors;
// Add all of x's ancestors to set.
while (true) {
ancestors.insert(x);
if (x == NULL)
break;
x = x=>parent;
}
// Check y's ancestors against x's until a match is found.
while (true) {
if (ancestors.count(y) > 0)
return y;
y = y->parent;
}
}
0
をpsudocodeです。それらを構文に変換するだけです。
GETLeastCommonAn(BINARYTREE BT, NODE A, NODE B)
IF Root==NIL
return NIL
ENDIF
IF Root==A OR root==B
return Root
ENDIF
Left = GETLCA (Root.Left, A, B)
Right = GETLCA (Root.Right, A, B)
IF Left! = NIL AND Right! = NIL
return root
ELSEIF Left! = NIL
Return Left
ELSE
Return Right
ENDIF
関連する問題
- 1. Scala最低共通祖先
- 2. バイナリツリー内の最も低い共通祖先
- 3. Javaで再帰的に最も低い共通祖先
- 4. ネストされたセット内の最も低い共通祖先を見つける
- 5. バイナリ検索ツリーで最も低い値のパス
- 6. 再帰を使用してバイナリツリーで最も低い共通祖先
- 7. バイナリツリーで最も低い共通祖先、入力とアルゴリズムを読む
- 8. NetworkXを持つすべての最低共通祖先
- 9. Neo4j最低共通祖先ノードが見つかりません
- 10. バイナリツリーの最初の共通祖先
- 11. ツリー内で最も共通の祖先を見つける際にエラーが発生しました。
- 12. 共通の先祖クラス
- 13. バイナリ検索ツリー
- 14. バイナリ検索ツリー
- 15. バイナリ検索ツリー
- 16. バイナリ検索ツリー
- 17. バイナリツリー、バイナリ検索ツリー、バイナリ検索
- 18. バイナリ検索ツリー - 最も重いパスアルゴリズムを取得するC++
- 19. 幅広い最初の検索バイナリ検索ツリーjavascriptの実装
- 20. deleteバイナリ検索ツリー
- 21. バイナリ検索ツリー?アルゴリズム
- 22. バイナリ検索ツリー式
- 23. Cバイナリ検索ツリー
- 24. バイナリ検索ツリーC++
- 25. バイナリ検索ツリー - ポストオーダーロジック
- 26. 最も近い共通祖先を持つ要素を選択する
- 27. バイナリ検索ツリーの検索操作
- 28. バイナリ検索ツリーのセグメンテーションフォールト
- 29. バイナリ検索ツリーの再帰
- 30. バイナリ検索ツリーの質問
@swiss:どのノードにも親フィールドは与えられていません。親ノードが与えられた場合、BSTの使用は何か。 :P –
@arvind mohan:BST実装が親へのポインタを持つのを止めるものは何もありません。確かに、それは技術的に必要ではありませんが、あなたがやろうとしているように、特定のことをより簡単にします。親ポインタが与えられていない場合でも、ツリーを歩いてxとyの祖先を含むセットを作成できます。あなたは親ポインタの代わりにwhileループでそれを使うことができます。 – Swiss