現在、私は書籍からデータ構造を学んでいます。完全なバイナリツリーについては、配列に格納することができます。しかし、アルゴリズムを思いつくことはできませんし、配列を完全なバイナリツリーに変換することもできません。誰でもCでこれを手伝ってもらえますか? このような質問は、バイナリツリーでのトラバースと同様に再帰で解決できると思いますが、私はそれを行うことはできませんし、非再帰メソッドでも解決できません。完全なバイナリツリーを配列に格納するアルゴリズム
答えて
機能へのポインタを呼び出すトラバーサルインオーダー関数が必要です。
EDIT:スタックオーバーフローへ
struct container {
void *data;
int count;
};
void tree_walk_recurse(const t_node *node, void (*func)(void *, void *), void *data)
{
if (node->left) tree_walk_recurse(node->left, func, data);
func(node->data, data);
if (node->right) tree_walk_recurse(node->right, func, data);
}
void tree_walk(const t_node *root, void (*func)(void *, void), void *data)
{
if (root && func) tree_walk_recurse(root, func, data);
}
void insert(void *data, void *ptr)
{
struct data *array = ptr;
array->data[array->count++] = data;
}
/* Traverse in-order using insert */
struct container array;
array.data = malloc(sizeof(struct data) * n);
array.count = 0;
tree_walk(root, insert, &array);
関数insertはより多くのパラメータを必要とします。配列の挿入位置へのポインタで、* ptr = dataを行うことができます。 –
@PeterSkarpetis、あなたは正しいです!、編集 –
@AlterMannありがとうございます。しかし、私は自分自身をはっきりと表現していないようです。私は配列内に完全なバイナリを格納すると思いますが、私が望むものは、A [1]のストアルート、A [2]の大きな息子、A [3]の小さな息子です。それから、A [4]、A [5]、A [6]、A [7]の4人の孫。この順番でどのように保管するか教えていただけますか? – JiangFeng
- 1. 配列としての不完全なバイナリツリー
- 2. 変数にトイレを格納することは、完全なファイル
- 3. これは完全なバイナリツリーですか?
- 4. sharedpreferencesに配列を格納
- 5. 配列をデータテーブルに格納
- 6. php配列をjavascript配列に格納
- 7. データベースに配列を格納する
- 8. バイト配列にintを格納する
- 9. 配列に要素を格納する
- 10. オブジェクトを配列に格納する(Haxe)
- 11. 配列をハッシュに格納する
- 12. jsonを配列に格納する
- 13. Solrに配列を格納する
- 14. derbyデータベースに配列を格納する
- 15. TFS2015:SQLデータベースに格納された完全なファイルパス
- 16. pandas read_htmlは完全なデータを格納していません
- 17. Javaで完全なバイナリツリーにノードを挿入する方法は?
- 18. firebaseに格納するオブジェクト対配列
- 19. ABRecordRefの配列を格納
- 20. MySQLの日付フィールドに不完全な日付を格納する
- 21. Evaluatejsonpathが完全な配列を返す
- 22. 配列名を配列に格納する方法は?
- 23. 配列を配列キーに格納する
- 24. 2D配列を3D配列に格納する
- 25. 配列とオブジェクトを別の配列に格納する
- 26. 配列を配列に格納する方法
- 27. Parseからローカル配列に配列を格納する
- 28. 完全サフィックス配列
- 29. 16進値を格納する配列
- 30. chrome.storage.localで配列を格納する
ようこそ:@Peter Skarpetisで指摘したように、あなたがグローバルまたは
static
sの関数へのポインタの後に追加のパラメータを渡すの使用を避けることができます!これまでのところあなたの研究/デバッグの努力を示してください。まず[Ask]ページをお読みください。 –https://en.wikipedia.org/wiki/Binary_heap#Heap_implementation –
@PeteKirkham非常にありがとう、私は良い方向を与えてくれた、私は今それを検索する方法を知っている:) – JiangFeng