-2

既存のバイナリ ツリーの前後のトラバーサルを実行する関数を実装したいと思います。

これらのトラバーサルは、定義済みのテスト関数によって表示される必要があります

ここに私がこれまでにプレオーダートラバーサルのために得たものがあります

uint64_t i = 0;
int *binarytree_prefix(binarytree *tree) {
    uint64_t *prefixArray = malloc(inputArrayLength_helper * sizeof(uint64_t));

    prefixArray[i] = tree->value;
    i++;
    if (tree->left != NULL) {
        return (binarytree_prefix(tree->left));
    }

    if (tree->right != NULL) {
        return (binarytree_prefix(tree->right));
    }
}

現在のノードの値を配列に挿入し、配列内の位置をインクリメントし、左側のツリーと右側のツリーで再帰を実行すると考えましたが、これは機能しません。誰かがそれを実行するのを手伝ってくれることを願っています

私がしたことは、事前注文トラバーサルを使用した深さ優先検索であり、現在の値で埋めるために配列を含めました

メイン内のテスト関数:

int *prefixArray = bintree_prefix(tree);

printf("Prefix notation : ");
for(uint64_t i = 0; i < inputArrayLength; i++) {
    printf(" %d", prefixArray[i]);
}
printf("\n");

free(prefixArray);
4

1 に答える 1

1

コードのいくつかの異なるバリエーションの後、私は最終的に正しい解決策を得ました

興味のある方へ

int *bintree_prefix(bintree *tree)
{
int *prefixArray = malloc(17*sizeof(uint64_t));
return (bintree_prefix_visited(tree, prefixArray));
}
int bintree_prefix_visited(bintree *tree, int *prefixArray)
{
if (tree!=NULL)
    {
    prefixArray[a]=tree->value;
    a++;
    bintree_prefix_visited(tree->left, prefixArray);
    bintree_prefix_visited(tree->right, prefixArray);
    }
return prefixArray;
}
于 2014-06-01T06:20:25.427 に答える