標籤:info 先序遍曆 null 運行 樹遍曆 兩個指標 方式 研究 需要
概念
樹是一種非線性資料結構,相對於線性資料結構(鏈表、數組)而言,樹由節點群組成,樹的平均已耗用時間更短(往往與樹相關的排序時間複雜度都不會高),一般的樹是有很多很多個分支的,分支下又有很多很多個分支,如果在程式中研究這個會非常麻煩。因為本來樹就是非線性,而我們電腦的記憶體是線性儲存的,太過複雜的話我們無法設計出來的,因此,我們先來研究簡單又經常用的---> 二叉樹。
二叉樹
二叉樹的意思就是說:每個節點不能多於有兩個兒子。
樹的建立
樹由節點群組成,因此,我們定義樹的時候往往是->定義節點->節點串連起來就成了樹,而節點的定義就是:一個資料、兩個指標(如果有節點就指向節點、沒有節點就指向null)。
上面說了,樹是由若干個節點群組成,節點串連起來就成了樹,而節點由一個資料、兩個指標組成
因此,建立樹實際上就是建立節點,然後串連節點
樹的遍曆
我們如果可以像數組一樣遍曆樹(看它的資料),那就說明樹建立完成了~
二叉樹遍曆有三種方式:
先序遍曆
先訪問根節點,然後訪問左節點,最後訪問右節點(根->左->右)
中序遍曆
先訪問左節點,然後訪問根節點,最後訪問右節點(左->根->右)
後序遍曆
先訪問左節點,然後訪問右節點,最後訪問根節點(左->右->根)
遍曆二叉樹的一個例子:
以上面的二叉樹為例:
如果是先序遍曆:10->9->20->15->35
如果是中序遍曆:9->10->15->20->35
可能需要解釋地方:訪問完10節點過後,去找的是20節點,但20下還有子節點,因此先訪問的是20的左兒子15節點。由於15節點沒有兒子了。所以就返回20節點,訪問20節點。最後訪問35節點
如果是後序遍曆:9->15->35->20->10
可能需要解釋地方:先訪問9節點,隨後應該訪問的是20節點,但20下還有子節點,因此先訪問的是20的左兒子15節點。由於15節點沒有兒子了。所以就去訪問35節點,由於35節點也沒有兒子了,所以返回20節點,最終返回10節點
一句話總結:先序(根->左->右),中序(左->根->右),後序(左->右->根)。如果訪問有孩子的節點,先處理孩子的,隨後返回
無論先中後遍曆,每個節點的遍曆如果訪問有孩子的節點,先處理孩子的(邏輯是一樣的)
因此我們很容易想到遞迴。
有意思的是:通過先序和中序或者中序和後序我們可以還原出原始的二叉樹,但是通過先序和後續是無法還原出原始的二叉樹的
也就是說:通過中序和先序或者中序和後序我們就可以確定一顆二叉樹了!
資料結構--樹