1

私は通常の二分木を持っており、 c を使用して反復的な深さの最初の検索を適用しようとしています:

struct node {
    int data;
    struct node * right;
    struct node * left;
};

typedef struct node node;

ノードをツリーに挿入する関数を使用していますが、検索関数を次のように実装する必要があります。つまり、 function search(root,goal,maxLevel) 深さ優先検索を使用して検索しますが、特定の最大レベルまで検索してから停止します。これは私の最初の試みでした。作業:

currentLevel = 0;
void search(node ** tree, int val, int depth)
{
    if(currentLevel <= depth) {
        currentLevel++;
        if((*tree)->data == val)
        {
            printf("found , current level = %i , depth = %i", currentLevel,depth);

        } else if((*tree)->left!= NULL && (*tree)->right!= NULL)
        {
            search(&(*tree)->left, val, depth);
            search(&(*tree)->right, val, depth);
        }
    }
}

助けてください、ありがとう...

4

2 に答える 2

2

あなたは決して止まらない...

node *search(node ** tree, int val, int depth)
{
    if (depth <= 0)
    {
        return NULL; // not found
    }

    if((*tree)->data == val)
    {
        return *tree;
    }

    if((*tree)->left)
    {
        node * left = search(&(*tree)->left, val, depth - 1);
        if (left) return left; // found
    }
    if((*tree)->right)
    {
        node * right = search(&(*tree)->left, val, depth - 1);
        return right; // whatever is result of right
    }
    return NULL; // not found
}
于 2013-04-20T22:55:20.873 に答える
1

これにはグローバル変数は機能しません。あなたは次のようなものが欲しい

void search(node ** tree, int val, int remainingDepth) {
    if (remainingDepth == 0) return;

それから

        search(&(*tree)->left, val, remainingDepth - 1);
        search(&(*tree)->right, val, remainingDepth - 1);

それぞれが独立してnullになる可能性があるため、左右のnullを個別にチェックすることもおそらく必要です。

于 2013-04-20T22:56:52.840 に答える