1. 程式人生 > >鏈表,二叉樹相關算法的簡單整理

鏈表,二叉樹相關算法的簡單整理

kmp 誰的 指針 感覺 它的 左右子樹 排序 原理 鏡像

最近在刷牛客網的劍指offer的題,感覺自己的編程能力還是很差,有時候有思路但是總是需要調試蠻久的時間,但是練習的太少。

鏈表

A->B->C->D

簡單的說單鏈表就是一個當前的節點只指向鏈表的下一個節點,鏈表的前一個節點不知道,它的每一個節點中只保留這當前節點的值,和下一個節點.

(1)找出鏈表倒數第K位的數據(穩定性)

排除,鏈表為空,鏈表的長度小於K的情況。

雙指針,一個指針先走K-1步,另一個指針開始移動

(2)將鏈表中的數據根據比K的數放在左邊,比K小的數據放在右邊,相對位置不發生變化。

新建兩個鏈表,一個保存比K小的,一個保留比K大的(以空間換時間)

(3)刪除鏈表中的一個節點

由於不知道上一個節點,但是知道下一個節點,復制下一個節點的所有信息就可以了

(4)將兩個排完序的鏈表進行合並,合並後的鏈表還是有序的

新建一個鏈表,哪個鏈表的值大,誰的指針向後移動一位,原理比較簡單,但是註意指針的移動

(5)刪除鏈表中重復的元素節點

排序,然後再比較

(6)翻轉鏈表(沒有額外的空間)

隨著指針的移動改變節點的指向

二叉樹

(1)恢復二叉樹,已知前序中序,已知中序後序

叠代,根據中序獲取根節點,根據前序和後序獲取左右子樹的長度

(2)前序、中序、後序

中序:叠代比較方便

前序和後序:用棧比較方便

(3)二叉樹鏡像

左右節點互換

(4)已知兩個二叉樹,判斷是否是子樹

序列化兩個二叉樹,用KMP算法

(5)打印,序列化二叉樹

每層的最後一個節點位置要控制好

鏈表,二叉樹相關算法的簡單整理