वहाँ पर एक पेज है http://geeksforgeeks.org/?p=6633 कि traversals अपनी अग्रिम आदेश से और इन-क्रम एक पेड़ के निर्माण की चर्चा है। यहाँ, के बाद से अपने पेड़ एक खोज पेड़ है, तो आप में से आदेश ट्रावर्सल परोक्ष (का उपयोग करते हुए चाबियों का सॉर्ट क्रम) है। आप प्रत्येक पेड़ नोड के स्तर की गणना करने के उस साइट पर एक तरह पुनरावर्ती एल्गोरिदम का उपयोग कर सकते (पेड़ का निर्माण करने की जरूरत के बिना) तो आंतरिक पथ की लंबाई प्राप्त करने के लिए एक साथ स्तरों जोड़ें। यही कारण है कि एल्गोरिथ्म, सबसे कारगर नहीं हो सकता है, क्योंकि यह प्रत्येक नोड के दाईं बच्चे को खोजने के लिए ट्रेवर्सल पर खोजों करता है, लेकिन यह काम करना चाहिए। इस तरह एक भी पास एल्गोरिथ्म (यह मानते हुए सभी कुंजियों अलग हैं) करने के लिए पर मेरे सबसे अच्छे अनुमान है:
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;
}
के साथ शुरू:
key_iter i = preorder.begin();
internal_path_length(i, preorder.end(), 0, mk);
जहां mkअपने पेड़ में सबसे बड़ा संभव कुंजी से बड़ा है।