原创 劍指offer-二叉搜索樹的第k個結點(python和c++)

題目描述 給定一棵二叉搜索樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8) 中,按結點數值大小順序第三小結點的值爲4。 思路: 二叉搜索樹按照中序遍歷的順序打印出來正好就是排序好的順序。 所以,按照中序遍

原创 劍指offer-把二叉樹打印成多行(python和c++)

題目描述 從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。 思路: 每一次維護兩個列表,循環一層先把該層的根節點添加進一個列表,再判斷該層節點的左右子節點是否存在,存在就把left和right的節點的都添加進去,依

原创 劍指offer-鏈表中環的入口結點(python和c++)

題目描述 給一個鏈表,若其中包含環,請找出該鏈表的環的入口結點,否則,輸出null。 思路來自牛客大佬的筆記,講的十分清楚。 思路: 設置快慢指針,都從鏈表頭出發,快指針每次走兩步,慢指針一次走一步,假如有環,一定相遇於環中某點(

原创 劍指offer-二叉樹的下一個結點(python和c++)

題目描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。 思路(來自牛客大神回答):首先知道中序遍歷的規則是:左根右,然後作圖 結合圖,我們

原创 劍指offer-刪除鏈表中重複的結點(python和c++)

題目描述 在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,重複的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理後爲 1->2->5 非遞歸的代碼思路: 首先添加一個頭節點,以方

原创 劍指offer-對稱的二叉樹(python和c++)

題目描述 請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。 思路:首先根節點以及其左右子樹,左子樹的左子樹和右子樹的右子樹相同 左子樹的右子樹和右子樹的左子樹相同即可

原创 劍指offer-求1+2+3+...+n(python和c++)

題目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。 思路 1.需利用邏輯與的短路特性實現遞歸終止。 2.當n==0時,(n>0)&&

原创 劍指offer-不用加減乘除做加法(python和c++)

題目描述 寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。 思路: /* 首先看十進制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算進位,得到2。 第二步:計算進位值,得到10. 如果

原创 劍指offer-二叉搜索樹的後序遍歷序列(python和c++)

題目描述 輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。 思路: 首先要弄清楚二叉搜索樹和二叉樹的後序遍歷。 後序遍歷的序列中,最後一個數

原创 劍指offer-棧的壓入,彈出序列(python和c++)

題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能爲該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4

原创 劍指offer-從上往下打印二叉樹(python和c++)

題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右打印。 解題思路: 剛開始看到這題愣了半天,本題實際上就是二叉樹的層次遍歷,深度遍歷可以用遞歸或者棧,而層次遍歷很明顯應該使用隊列。每次打印一個結點時,如果該結點有子結點,

原创 劍指offer-包含min函數的棧(python和c++)

題目描述 定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1))。 注意:保證測試中不會當棧爲空的時候,對棧調用pop()或者min()或者top()方法。 思路: 維護兩個棧A,B,

原创 劍指offer-樹的子結構(python和c++)

題目描述 輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構) /*思路:參考劍指offer 1、首先設置標誌位result = false,因爲一旦匹配成功result就設爲true, 剩下

原创 劍指offer-重建二叉樹(python和c++)

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重

原创 劍指offer-旋轉數組的最小數字(python和c++)

題目描述 把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。 輸入一個非遞減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。 N