現在、私は書籍からデータ構造を学んでいます。完全なバイナリツリーについては、配列に格納することができます。しかし、アルゴリズムを思いつくことはできませんし、配列を完全なバイナリツリーに変換することもできません。誰でも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. sharedpreferencesに配列を格納
- 4. バイト配列にintを格納する
- 5. jsonを配列に格納する
- 6. オブジェクトを配列に格納する(Haxe)
- 7. derbyデータベースに配列を格納する
- 8. データベースに配列を格納する
- 9. Solrに配列を格納する
- 10. TFS2015:SQLデータベースに格納された完全なファイルパス
- 11. pandas read_htmlは完全なデータを格納していません
- 12. firebaseに格納するオブジェクト対配列
- 13. ABRecordRefの配列を格納
- 14. MySQLの日付フィールドに不完全な日付を格納する
- 15. Parseからローカル配列に配列を格納する
- 16. 配列を配列キーに格納する
- 17. 2D配列を3D配列に格納する
- 18. 配列名を配列に格納する方法は?
- 19. 配列とオブジェクトを別の配列に格納する
- 20. 配列を配列に格納する方法
- 21. 完全サフィックス配列
- 22. データを格納するPHP配列
- 23. オブジェクトの配列を格納する
- 24. Eigen配列のリストを格納する
- 25. chrome.storage.localで配列を格納する
- 26. ObjectIdの配列を格納するMongoDB
- 27. 16進値を格納する配列
- 28. javascriptを格納する配列
- 29. Javascript配列格納処理
- 30. GAEデータストアに有向グラフ、重み付き完全グラフを格納
ようこそ:@Peter Skarpetisで指摘したように、あなたがグローバルまたは
static
sの関数へのポインタの後に追加のパラメータを渡すの使用を避けることができます!これまでのところあなたの研究/デバッグの努力を示してください。まず[Ask]ページをお読みください。 –https://en.wikipedia.org/wiki/Binary_heap#Heap_implementation –
@PeteKirkham非常にありがとう、私は良い方向を与えてくれた、私は今それを検索する方法を知っている:) – JiangFeng