Jest to strona, na http://geeksforgeeks.org/?p=6633 który omawia budowanie drzewa z jego przedsprzedaży iw zamówienie przechodzenia przez. Tutaj, ponieważ drzewo jest drzewem wyszukiwania, masz przechodzenie na zamówienie dorozumiany (używając porządek kluczy). Można użyć algorytmu rekurencyjnego jak ten w tym miejscu, aby obliczyć poziom każdego węzła drzewa (bez konieczności budowania drzewa), a następnie dodać poziomy razem, aby uzyskać wewnętrzną długość ścieżki. Że algorytm może nie być najbardziej efektywny, ponieważ robi wyszukiwania na przechodzenie znaleźć właściwą dziecku każdego węzła, ale powinno działać. To jest mój najlepszy przypuszczenie na jak zrobić algorytm single-Pass (przy założeniu, że wszystkie klucze są różne):
int internal_path_length(key_iter& cur_node, key_iter end, int level, key max_key) {
if (cur_node == end) return 0;
key cur_key = *cur_node;
if (cur_key > max_key) return 0;
++cur_node;
int len1 = internal_path_length(cur_node, end, level + 1, cur_key);
int len2 = internal_path_length(cur_node, end, level + 1, max_key);
return len1 + len2 + level;
}
Zacząć od:
key_iter i = preorder.begin();
internal_path_length(i, preorder.end(), 0, mk);
gdzie mkjest większy od największego możliwego klucza w drzewie.