因爲最近一直在忙目標檢測這塊的項目,一直沒有時間靜下心來總結經典算法之一:二叉樹。下面我會給你們介紹二叉樹的定義以及其應用,方便你們加深對該算法的理解。html
二叉樹是一種特殊的樹,它具備如下特色:算法
1.樹中每一個節點最多隻能有兩棵樹,即每一個節點的度最多爲2。 spa
2.二叉樹的子樹有左右之分,即左子樹與右子樹,次序不能顛倒。 htm
3.二叉樹即便只有一個子樹時,也要區分是左子樹仍是右子樹。blog
如下遍歷以該二叉樹爲例:隊列
思想:先訪問根節點,再先序遍歷左子樹,而後再先序遍歷右子樹。總的來講是根—左—右.上圖先序遍歷結果爲爲:1,2,4,8,9,5,3,6,7get
思想:先中序訪問左子樹,而後訪問根,最後中序訪問右子樹。總的來講是左—根—右,上圖中序遍歷結果爲爲:8,4,9,2,5,1,6,3,7class
思想:前後序訪問左子樹,而後後序訪問右子樹,最後訪問根。總的來講是左—右—根,上圖後序遍歷結果爲爲:8,9,4,5,2,6,7,3,1二叉樹
思想:利用隊列,依次將根,左子樹,右子樹存入隊列,按照隊列的先進先出規則來實現層次遍歷。上圖後序遍歷結果爲爲:1,2,3,4,5,6,7,8,9遍歷
思想:利用棧,先將根入棧,再將根出棧,並將根的右子樹,左子樹存入棧,按照棧的先進後出規則來實現深度優先遍歷。上圖後序遍歷結果爲爲:1,2,4,8,9,5,3,6,7
參考鏈接: