2011-12-03 52 views
5

樹數據結構可視化有一些算法嗎?我嘗試了谷歌搜索,但沒有找到任何。我很確定這不是那麼簡單的任務必須有一些算法。或者任何人有一些想法?樹可視化算法

+3

你在找什麼像Graphviz? http://www.graphviz.org/ –

+1

你確定你正在尋找一種算法或服務來顯示它嗎? – Duniyadnd

+0

我必須在我的項目中可視化樹,因此我需要算法。 – MrProper

回答

7

假設:您希望顯示每個節點,使其位於其子節點上方。

爲了達到此目的,計算每個節點的寬度,我將其定義爲顯示此節點的整個子樹所需的水平空間量,使其不會與其左側或右側兄弟的子樹重疊。

這導致:

width = 1 + sum(widths of children's nodes) 

所以,做一個深度優先遍歷整個樹來計算每個節點的寬度。要顯示,請先進行寬度優先遍歷,逐級繪製樹。

這是如何去做的大概想法。您可能想調整寬度計算,具體取決於您想要渲染樹的細節。

1

例如,您可以使用DOT語言和graphviz。

3

Tree-mapping可能是你在找什麼。 Graphviz適用於可視化不專門用於樹結構的圖形結構。我再也找不到它了,但是我記得在一篇科學文章中讀到過,treemaps(我認爲voronoi)最適合表示樹結構,關於它們消耗的位置和區域可以用來表示某個單位(比如字節大小例)。

Here是一些替代方案。

Here是關於該主題的文章和其他信息的良好列表。

0

您還可以從左到右打印樹,即最左側的根,第一級右側的樹等等。你會發現樹上印有每個級別的「自己的專欄」。該算法有點像這樣:

print(node, spaces): 
    if node has left child: 
     print(left_child, spaces + ' ') 
    print spaces + node + '\n' 
    if node has right child: 
     print(right_child, spaces + ' ') 

該算法將每行打印一個樹節點。樹的每個級別都會被一些空格向右縮進。此算法將按升序打印項目,但可以通過首先處理正確的小孩來實現降序。