go之樹型結構深度理解
如果你是一個編程人員,或多或少對樹型結構都有一定的認識,我個人對樹型數據結構是又愛又恨。這篇文章主要講解一些關於tree的數據結構以及使用。
什麼是樹?
數組、列表、隊列、隊列、堆棧都是以一個集合的形式存儲數據,一般稱它們被稱爲 "線性"存儲結構。但當涉及到樹(trees)和圖(graphs)時,事情就會變得混亂,因爲數據不是以線性方式存儲的。
樹被稱爲非線性數據結構。事實上,你也可以說樹是分層數據結構,因爲數據是以分層的方式存儲的。
後面爲了講解方便統一叫tree
tree是由節點或頂點和邊組成的數據結構,沒有節點的樹被稱爲空樹,非空樹由一個根節點和許多層級的附加節點組成,是一個具有層次的結構。
下面通過一個例子來看一下什麼是 tree。
上面圖中的數據結構是一個節點的組合,從A到F這些圓圈稱爲節點,有6個邊(edge)。雖然它的所有元素看起來都像構造了一棵樹,但節點A、D、E、F形成了一個閉環,所以這個結構不是一個有效的樹。
如果我們打破F和E之間的連接,並在F和G之間添加一個新的節點,叫做G的邊緣。