2014-11-27 2 views
1

Я создал дерево, используя этот код (это устаревший взгляд на дне, проблема обновлена):Рекурсивный код для поиска макс высоты бинарного дерева

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); 
} 
+0

mb Ваша вставка работает неправильно? –

+0

Это зависит от вашей функции. Если считалось, что это двоичное дерево, то глубина правильная –

+0

функция вычисления maxHeight верна. Может быть, их проблема во вставке ... –

ответ

0

код работает, но похоже, что вы построили не то, что вы имели в виду, возможно, аттенюирование нового узла к предыдущему узлу (а не к единственному корню). Предполагая, что вставка возвращает узел только что созданный, то ваши первые добавить узел дерева 2: Дерева: (2) вы добавляете узел дерева 4 в качестве дочернего узла дерева 2: Дерева: (2)--(4) Наконец вы добавляете узел дерева 10 в качестве дочернего узла дерева 4: Дерево: (2)--(4)--(10)

Таким образом, вы можете увидеть глубину дерева 3 (включая корень).

+0

Я понимаю, что вы сейчас говорите, я думаю, но, похоже, вы делаете предположения о вставке. Кажется, вы говорите, что дерево вставляется в список. – ChiefTwoPencils

+0

Мое единственное предположение состоит в том, что вставка (x, y) создает узел для значения y и помещает его как дочерний элемент x. Нет предположений о том, является ли это списком или другой структурой данных. –

+0

Вероятно, это правда, я работаю над созданием дерева по-разному. – Tom

Смежные вопросы