я имею нормальное бинарное дерево, которое я пытаюсь применить итерационные глубины Углубления первого поиск по использованию 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);
}
}
}
пожалуйста, помогите, спасибо ...
Опишите * что * не работает. –
Почему вы не уменьшаете глубину каждый раз, когда идете глубже? Затем проверьте, чтобы оно было больше нуля. – Kninnug
Вероятно, вам не нужна глобальная переменная 'currentLevel()'. Вероятно, вам не следует искать как левый, так и правый поддеревья - вам, вероятно, следует искать левое поддерево, если значение меньше, чем значение в текущем узле, и правое поддерево, если значение больше, чем значение в текущем узле. Вероятно, вам нужно вернуть указатель на узел, где было найдено значение; вам может понадобиться какой-то способ отличить «не найден», «слишком глубоко» и «найден». –