2012-04-14 2 views
0

Узел двоичного дерева имеет два указателя: «левый» и «правый» и два поля данных: «левый» и «правый». «leftcount» указывает количество узлов в левом поддереве узла, а «rightcount» указывает количество узлов в правом поддереве узла. Напишите алгоритм заполнения полей данных всех узлов дерева.Заполнение поля данных всех узлов дерева

Мне задали этот вопрос в интервью. Я придумал решение, основанное на постобработке обхода дерева. Может кто-нибудь, пожалуйста, направить меня на это.

+1

Если у вас уже есть решение, то, что ваш вопрос для аудитории SO? –

+0

@OliCharlesworth: Спасибо за ваш ответ. Я поставил этот пост, как меня спросили, могу ли я сделать это любым другим способом, который я предложил. – user1225752

ответ

1

Это должно работать (я считаю):

int populateCounters(Node* node) { 
    if(node == NULL) return 0; 
    node->leftCount = populateCounters(node->left); 
    node->rightCount = populateCounters(node->right); 
    return node->leftCount + node->rightCount + 1; 
}