【发布时间】:2016-12-14 00:13:20
【问题描述】:
我是一名初学者,正在研究 C 二叉搜索树。我正在尝试做一个方法来返回我的树中的叶子数。叶子是指没有子节点(左/对)这是我的树结构:
struct Node {
int value;
struct Node *left;
struct Node *right;
};
typedef struct Node TNode;
typedef struct Node *binary_tree;
它是这样创建的:
binary_tree NewBinaryTree(int value_root) {
binary_tree newRoot = malloc(sizeof(TNode));
if (newRoot) {
newRoot->value = value_root;
newRoot->left = NULL;
newRoot->right = NULL;
}
return newRoot;
}
我向它添加元素,例如:
void Insert(binary_tree *tree, int val) {
if (*tree == NULL) {
*tree = (binary_tree)malloc(sizeof(TNode));
(*tree)->value = val;
(*tree)->left = NULL;
(*tree)->right = NULL;
} else {
if (val < (*tree)->value) {
Insert(&(*tree)->left, val);
} else {
Insert(&(*tree)->right, val);
}
}
}
我实际计算叶子数的方法:
int nbleaves(binary_tree tree)
{
int nb;
if(tree->right==NULL && tree->left ==NULL){
nb=nb+1;
}
printf("%d",nb);
}
当然这首先不起作用,没有实际的循环,但是我试过它没有返回任何错误,而是返回 0(例如,将元素 2222 和 3 添加到树后,此函数返回 0)。我不知道如何执行此功能.
谢谢!
【问题讨论】:
-
函数的缺失位,将
printf("%d",nb);替换为else { if (tree->right != NULL) nb += nbleaves(tree->right); if (tree->left != NULL) nb += nbleaves(tree->left); } return nb; -
@ikegami 我试过这个,它确实可以编译,但是当我用那个代码调用那个函数时,它会使程序崩溃
标签: c tree binary-tree binary-search-tree