Я создал дерево, используя этот код (это устаревший взгляд на дне, проблема обновлена):Рекурсивный код для поиска макс высоты бинарного дерева
struct node* buildTree() {
struct node* root = NULL;
root = insert(root, 2);
root = insert(root, 4);
root = insert(root, 10);
return(root);
}
Затем пытался найти максимальную глубину, что (функции Макс. и вставка работают должным образом), используя это:
int maxHeight(struct node* p) {
if(p == NULL) {return 0;}
else{
int leftDepth = 1 + maxHeight(p->left);
int rightDepth = 1 + maxHeight(p->right);
return(Max(leftDepth, rightDepth));
}
}
И это показывает мне ошибку, как максимальная глубина 3; Я составлен в стандарте C99
. Я нашел этот и аналогичный код в нескольких местах в Интернете, но здесь не работает, какие-то идеи, что не так? Спасибо ..
Как предложил добавить код для вставки:
struct node* insert(struct node* node, int data) {
if (node == NULL) {
return(newNode(data));
}
else {
if (data <= node->data) node->left = insert(node->left, data);
else node->right = insert(node->right, data);
return(node);
}
}
И функция newNode:
struct node* newNode(int data) {
struct node* node = malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
Update: Новая buildTree функция:
struct node* buildTree() {
struct node* root = newNode(3);
root->left = newNode(2);
root->right = newNode(1);
return(root);
}
mb Ваша вставка работает неправильно? –
Это зависит от вашей функции. Если считалось, что это двоичное дерево, то глубина правильная –
функция вычисления maxHeight верна. Может быть, их проблема во вставке ... –