k
複数のノードを持つツリーのデータ構造を与え、ノードのth 祖先を見つけるアルゴリズムを書きます。
データ構造は以下でよいでしょうか?
struct node
{
int data;
int n;
struct node** child;
}
k
番目の祖先を見つけることについて混乱しています。
k
複数のノードを持つツリーのデータ構造を与え、ノードのth 祖先を見つけるアルゴリズムを書きます。
データ構造は以下でよいでしょうか?
struct node
{
int data;
int n;
struct node** child;
}
k
番目の祖先を見つけることについて混乱しています。
次のようなツリーを考えてください。
h
d l
b f j n
a c e g i k m o
そして、次のようなメソッド: getParent(int k, char value)
If my call was getParent(3, 'm') it would return 'h'
The search would go: h->l->n->m; back three spots from m is h
If my call was getParent(2, 'e') it would return 'd'
The search would go: h->d->f->e; back two spots from e is d
はい、提供される構造は多子 (k-ary) ツリーになります。
しかし、その構造では、k 番目の祖先を見つけるための特に効率的なアルゴリズムを取得することはできません。必要な要素を見つけるために (ルートから) ツリー全体を再帰的に調べ、上に再帰する必要があります。 k 番目の祖先を検索します。
0
ます。-1
):
k
が見つかりました。k
+1
。-1
ます。実行時間は になりますO(n)
。ここn
で、 はツリー内のノードの数です。
別の構造が許可されている場合:
子ノード ポインターの代わりに / に加えて、各ノードの親ノード ポインターを格納できます。次に、目的の深さに到達するまで、単純に親ノードを繰り返し見ることができます。
実行時間はO(k)
、k 番目の祖先を見つけたい場所です。