迭代
遞歸
鏈表是一種兼具遞歸和迭代性質(zhì)的數(shù)據(jù)結(jié)構(gòu)
樹結(jié)構(gòu)不過是鏈表的衍生
遞歸性質(zhì):問題可以劃分為子問題,并且子問題與原問題的結(jié)構(gòu)相同
遞歸函數(shù)都有個 base case
對于遞歸算法,最重要的就是明確遞歸函數(shù)的定義
不要跳進遞歸,而是利用明確的定義來實現(xiàn)算法邏輯
寫遞歸算法的關鍵是要明確函數(shù)的「定義」是什么,然后相信這個定義,利用這個定義推導最終結(jié)果,絕不要跳入遞歸的細節(jié)
二叉樹題目的一個難點就是,如何把題目的要求細化成每個節(jié)點需要做的事情
寫二叉樹的算法題,都是基于遞歸框架的,我們先要搞清楚 root 節(jié)點它自己要做什么,然后根據(jù)題目要求選擇使用前序,中序,后續(xù)的遞歸框架。
二叉樹題目的難點在于如何通過題目的要求思考出每一個節(jié)點需要做什么,這個只能通過多刷題進行練習了。
數(shù)據(jù)結(jié)構(gòu)的存儲方式只有兩種:數(shù)組(順序存儲)和鏈表(鏈式存儲)
對于任何數(shù)據(jù)結(jié)構(gòu),其基本操作無非遍歷 + 訪問,再具體一點就是:增刪查改。
你就會發(fā)現(xiàn)只要涉及遞歸的問題,都是樹的問題(一種遍歷方式可以和它對應的數(shù)據(jù)結(jié)構(gòu)對應)
數(shù)據(jù)結(jié)構(gòu)的基本存儲方式就是鏈式和順序兩種,基本操作就是增刪查改,遍歷方式無非迭代和遞歸