樹數據結構
是一類非線性數據結構,是以分支關係定義的層次結構。spa
特色:.net
至少有一個節點——根,只有根的樹成爲最小樹指針
樹中各子樹是互不相交的集合blog
術語(略)ci
二叉樹get
特色:博客
每一個節點最多有二顆子樹it
子樹有左右之分,並且不能任意顛倒二叉樹
性質:
1,在二叉樹的第i層至多有2^(i-1)個節點(i >=1)
2,深度爲k的二叉樹至多有2^k - 1個節點(k>=1)
3,對任何一顆二叉樹T,若是其終端節點數爲n0,度爲2的節點數爲n2,則n0 = n2 + 1(書上有一段神奇的推導過程)
滿二叉樹:
看着整個輪廓是個完整的三角形的樹就是滿二叉樹。(本身定義的)
徹底二叉樹:
除了最後一行,上面是個滿二叉樹,最後一行依次排列。(也是本身定義的)
4,具備n個節點的徹底二叉樹的深度爲 以2爲底n的對數 + 1
5,若是對一顆有n個節點的徹底二叉樹的節點按層序編號,則對任一節點i(1 <= i <= n),有:
1)若是i=1,節點i就是二叉樹的根,沒有父節點;若是i>1,則其雙親是 i/2,向下取整。
2)若是2i>n,這節點i無左孩子。若是2i<=n,則其左孩子就是2i
3)若是2i+1>n,這節點i無右孩子。若是2i+1<=n,則其右孩子就是2i+1
二叉樹的存儲結構
順序存儲結構
特色:
節點間關係蘊含在其存儲位置中。
浪費空間,適於存儲滿二叉樹和徹底二叉樹。
不多用這種順序存儲結構,1,浪費空間,2,插入刪除很費勁兒,時間複雜度高。
鏈式存儲結構
二叉鏈表 : 左孩子指針、右孩子指針、數據域
三叉鏈表 : 比上面多了一個 父節點指針
總結:
在二叉鏈表中,查找節點都要從根節點開始進行查找,查找的時間複雜度是節點的個數。而在三叉鏈表中查找節點實現就比較容易些,由於針對每一個節點均可以進行上行查找或者下行查找。
學PHP的小螞蟻 博客 http://my.oschina.net/woshixiaomayi/blog