迭代加深二叉树中的深度优先搜索

时间:2013-04-20 22:49:26

标签: c depth-first-search iterative-deepening

我有一个正常的二叉树,我正在尝试使用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);
        }
    }
}

请帮助,谢谢...

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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。