2016-05-06 7 views
1

У меня есть двоичное дерево, а не BST, поэтому элементы не сортируются, а информация, которую каждый узел имеет, имеет тип строки. Когда я печатающие элементы, которые держат целые числа BST Я делаю это с помощью рекурсии, как это: (in_order печати)Как печатать элементы из двоичного дерева по уровню в c

void PrintElements(const Data* node) 
{ 
    // Check if its empty 
    if (node == NULL) 
     return; 

    PrintElements(node->left);  
    printf(" %d\n", node->key);  
    PrintElements(node->right);  
} 

Но я не могу понять, как печатать на уровне двоичных деревьев проведение строк, которые являются не отсортировано (в алфавитном порядке). Любая помощь очень ценится.

+3

Я думаю, что ваш вопрос немного неясен. Вам не нужны данные для сортировки в дереве, чтобы пересечь его и распечатать данные (он будет просто распечатан в том порядке, в котором он находится в дереве). Вы говорите, что у вас есть несортированное дерево, и вы хотите распечатать данные в алфавитном порядке? – Joel

+0

Когда вы говорите «распечатать их по уровню», вы хотите, чтобы вы печатали все записи на заданном уровне дерева перед печатью любых записей на следующем нижнем уровне? –

+1

Помогает ли это? http://stackoverflow.com/questions/3589716/level-order-traversal-of-a-binary-tree – Arun

ответ

1

Вы должны выполнить некоторые ДОПОЛНИТЕЛЬНОЕ функции для того, чтобы напечатать на уровне рекурсивным образом:

Во-первых, вам нужна функция, которая извлекает отсчет уровня дерева

int getLevelCount(Data *node) 
{ 
    if (node == NULL) 
    { 
     return 0; 
    } 
    int leftMaxLevel = 1 + getLevelCount(node->left); 
    int rightMaxLevel = 1 + getLevelCount(node->right); 
    if (leftMaxLevel > rightMaxLevel) 
    { 
     return leftMaxLevel; 
    } 
    else 
    { 
     return rightMaxLevel; 
    } 
} 

Во-вторых, вы должно реализовать функцию, которая печатает определенный уровень дерева:

void printLevel(Data *node, int level) 
{ 
    if (node != NULL && level == 0) 
    { 
     printf("%s\n", node->key); 
    } 
    else if (node != null) 
    { 
     printLevel(node->left, level - 1); 
     printLevel(node->right, level - 1); 
    } 
} 

Последних, печатаемой каждый уровень дерева (начиная от корневого узла):

void printElements(Data *node) 
{ 
    int i; 
    int levelCount = getLevelCount(node); 
    for (i = 0; i < levelCount; i++) 
    { 
     printLevel(node, i); 
    } 
} 

Надеюсь, что это поможет.

+0

Функции, которые вы мне дали, имеют уровень печати на уровне, как я и хотел, но они не печатали строки одинакового уровня на одной линии, но это напечатайте каждую строку на отдельной строке. Но это была простая настройка, мне просто нужно было включить функцию printElements для цикла one printf («\ n), после вызова функции printLevel и удалить« \ n »из второй функции и вместо этого вместо этого ввести пробел (« »). Тем не менее, вы полностью помогли мне, это была действительно настройка MINOR, которую я сделал, вы сделали ее намного более ясной, спасибо большое !!! – Deja123

+0

Я рад, что помог вам. Удачи! – Juan

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