2013-02-28 4 views
-4

Определите функцию sum_to_deepest(root), которая возвращает сумму ключей от корня до самого глубокого листа в дереве, корневом в корне. Если есть два самых глубоких листа, верните большую сумму; если корень равен None, верните 0.Вычисление глубины дерева в Python

В этой проблеме вы обнаружите, что это помогает определить вспомогательную функцию, которая возвращает как глубину самого глубокого листа, так и сумму по пути к этому листу.

+0

Да, это проблема домашней работы. Я просто не имею никакого представления о вычислении глубины. – user2010023

+0

Даунвотирование и голосование, чтобы закрыть этот вопрос, так как он явно скопирован + вставлен из задания профессора Питта. Задавать вопросы * о * домашних заданиях на StackOverflow в порядке, но просить о решениях нет. См.: [Как задавать вопросы и отвечать на домашние вопросы?] (Http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) –

+1

От «noobProgrammer» (без достаточного количества rep для комментариев, ответ удаляется): Это вопрос со следующего веб-сайта: http://www.cs.toronto.edu/~fpitt/CSC148/20131/homework/E4/index.html. Не отвечайте на этот вопрос, ребята! –

ответ

6

Вы должны действительно не просите об этом здесь для ответа. Сначала попробуйте что-нибудь. Я дам вам только подсказки и псевдокод.

Узел имеет атрибуты left, right, key.

Для расчета высоты вы можете сделать это рекурсивно. Вам нужно взять больше высоты левого и правого поддеревьев и добавить 1.

Представьте

A 
/\ 
    B C 
/
D 

псевдокод:

height(node)-> 
    if(node is a leaf) return 0 
    return maximum(height(left subtree), height(right subtree)) + 1 

Начиная с А,

height(A) -> maximum(height(B), height(C) + 1 
height(B) -> maximum(height(D), null) + 1 
height(D) -> 0 
height(B) -> 1 
height(C) -> 0 
height(A) -> maximum(1, 0) + 1 = 2 

Чтобы получить сумму, вам необходимо определить, какой путь по дереву собирается доставить вас до самого глубокого l т.в.ф.. Высота самого глубокого листа будет по пути поддерева с большей высотой, поэтому что-то вроде этого (псевдокод):

sum_to_deepest(node) -> 
    if(node is null) return 0 
    leftheight = height(left subtree) 
    rightheight = height(right subtree) 
    if(leftheight > rightheight) then 
     return (current key) + sum_to_deepest(left subtree) 
    return (current key) + sum_to_deepest(right subtree) 
Смежные вопросы