Я пытаюсь написать код для нахождения расстояний между корнем и любым узлом в двоичном дереве. Если значение узла, которое я ищу, не находится в дереве, я добавлю его в дерево и напишу его глубину. Я попытался написать код, но как-то для root я получил правильный ответ (depth = 0), и для чего-либо еще получаю значение depth = 1. Я давно искал код, так что, может быть, вы, ребята, можете помочь. Очень признателен.Найти расстояние между корнем и любым узлом в двоичном дереве
#include <stdio.h>
#include <stdlib.h>
typedef struct b_tree t;
struct b_tree {
int value;
struct b_tree * right;
struct b_tree * left;
};
int add(t **root, t *bam, int pom) {
if ((*root) == NULL) {
*root = bam;
return pom;
}
else {
if((*root)->value == bam->value){
return pom;
}
else if((*root)->value > bam->value) {
pom++;
add(&(*root)->left, bam, pom);
}
else if ((*root)->value < bam->value) {
pom++;
add(&(*root)->right, bam, pom);
}
}
return pom;
}
int main() {
t *akt, *root = NULL;
int x=1, pom=0, depth;
while (x!=0){
scanf("%d", &x);
pom=0;
akt = (t *)malloc(sizeof(t));
akt->left = akt->right = NULL;
akt->value = x;
depth = add(&root, akt, pom);
printf("%d\n", depth);
}
return 0;
}
При отладке код попадает в необычный цикл (??). если pom
- это значение, представленное как моя глубина от корня до узла, что он делает, он получает правильный ответ (глубина узла равна 3, pom = 3), но когда я пытаюсь вернуть pom; по неизвестной причине (мне) pom понижен всегда до 1. Спасибо за вашу помощь!