Я начинаю и работаю над деревом двоичного дерева C. Я пытаюсь сделать метод, который вернет количество листьев в моем дереве. Лишь я имею в виду узел (родитель), который не имеет ребенка (левый/правый) Heres мое дерево структура:Количество листьев в двоичном дереве поиска в 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). Я не знаю, как это сделать.
спасибо!
Что касается недостающего бит функции, заменить 'Е ("% D", пь),' 'с еще {если (! Tree-> вправо = NULL) нб + = nbleaves (tree-> right); если (дерево-> левый!= NULL) nb + = nbleaves (tree-> left); } return nb; ' – ikegami
@ikegami Я пробовал это, он компилируется, но когда я вызываю эту функцию с этим кодом, он разбивает программу –