2012-06-25 92 views
1

我想從已經聚集並保存在(離開)樹中的對象繪製樹狀圖。 Java中的我的羣集對象可以用這些圖片來表示。每個葉子都包含一個對象,每個節點包含其子元素之間的距離。從樹中的聚類對象逐步繪製樹狀圖的算法

http://i.stack.imgur.com/6nktv.png

現在,我要繪製樹形圖階梯,所以第一對象1和2應繪製,則對象3應該被添加到那些。然後將5和6等連接到一切連接的地方。我已經有了所有的工具來輕鬆地繪製這些東西,但是我無法找到正確穿過樹的有效方法。

這應該是迄今爲止在該示例中的結果(編輯:有一個錯誤,從5到6的距離現在看起來比從3到1的距離要小2,但在我的示例中不是這種情況!): http://i.stack.imgur.com/gecAF.png

有沒有人有這個遞歸算法的一些技巧?

回答

0

您首先渲染深度 - 您可能會發現需要跟蹤深度才能使佈局正常工作 - 同時請注意,您還必須繪製非終端筆記(「*」在3之前繪製)

基本上

draw(node) 
{ 
    if(hasleft) draw(left) 
    if(hasright) draw(right) 
    drawme() 
} 

這確實承擔二叉樹,但是這是你畫什麼 - 這是會得到,因爲佈局問題變得更復雜了 - 你真的要考慮拉寬首先從上往下,它使佈局減少很多痛苦

+0

對於出襯裏部分,我認爲從底部開始更容易(我知道我必須從添加圖片中的標籤開始)。樹並不完全是一個二叉搜索樹,即兩棵樹可以再次聚集到一棵樹,那麼它現在不再是我想的了? – simP

+0

啊,改變佈局會使事情變得簡單但並不完美 - 但是如果你從不打算標記除終端節點以外的任何東西 - 但是第一個佈局更好 - 你確定第二個圖不是二叉樹,因爲根元素有4個子元素 - 但是請注意,對於任何父行,您需要知道子元素的總數,以便計算父元素的垂直偏移量 –

+0

我不確定您的意思,但第一個圖片不是一個佈局,它只是一個可視化表示,使用Java中的樹類的Paint和其中的一些數據進行可視化表示,以清楚說明我的聚類對象是什麼樣的。 – simP