我正在尝试编写一个代码来查找根和二叉树中任何节点之间的距离。如果我要查找的节点的值不在树中,我将其添加到树中并写入其深度。我试着编写一个代码但不知何故为root我得到正确的答案(深度= 0)和其他任何东西我得到深度= 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.感谢您的帮助!
答案 0 :(得分:0)
您正在放弃对add()
的递归调用返回的值。将呼叫更改为:
return add(&(*root)->left, bam, pom);
...
return add(&(*root)->right, bam, pom);