該函數應該接受一個列表xs並構造一個平衡二叉搜索樹,其中包含與xs完全相同的一組元素。在Haskell中,如何生成一個完美平衡的二叉搜索樹?
結果應該是這樣的: (如果列表是[1,2,3,4,5,6,7,8])
節點(節點(節點(節點1空空) 2空)4(節點空4空))5(節點(節點空6空)7(節點空8空))
也就是說樹應該是這樣的:
5
/\
3 7
/\/\
2 4 6 8
/
1
而不是這個:
5
/\
4 6
/ \
3 7
/ \
2 8
/
1
有人能告訴我該怎麼做?我發現我可以做第二棵不完全平衡的樹,但不知道如何做第一棵樹。
我很感激任何幫助! 提前謝謝!
使用Data.Tree.AVL(或其他一些)http://hackage.haskell.org/package/AvlTree-4.2/docs/Data-Tree-AVL.html – josejuan
@josejuan:我認爲OP想找到最理想的,完美的ba藍色的樹。自我平衡只能保證他們的身高至多是一個恆定的倍數。 – hugomg
如果你已經有一個長度排序的列表(x^2 - 1),你可以使用這個不錯的[遞歸算法](http://brandon.si/code/building-a-tree-from-an-ordered-list /) – jberryman