原创 二叉樹的鏡像 樹的遍歷

傳送門 題意: 操作給定的二叉樹,將其變換爲源二叉樹的鏡像。 二叉樹的鏡像定義:源二叉樹 8 / \ 6 10 / \ / \ 5 7 9 11

原创 二叉樹指針實現 根據中序和前序/後序得到一棵樹 並進行前中後序遍歷以及層序遍歷 並判斷完全,完滿,滿二叉樹

//輸入前序和中序得到整棵樹,並進行前中後序遍歷以及層序遍歷 #include<bits/stdc++.h> using namespace std; const int maxn = 1000+5; struct BinaryTree

原创 棧的壓入,彈出序列 輔助棧 思維

傳送門 分析:藉助輔助棧,遍歷出棧序列的時候,每一個元素要麼在輔助棧的棧頂,要麼還沒有入棧,這時從入棧序列中找到這個值,並把它前面的元素全部入棧,這時它作爲棧頂,符合出棧序列,如果遍歷結束入棧序列還未找到這個值,那麼出棧序列不符合要求,返

原创 數組中出現次數超過一半的數字 多種方法

傳送門 題目描述 數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。 分析:

原创 鏈表中倒數第k個節點 棧 雙指針 擴展:尋找鏈表的中間節點

傳送門 分析:        首先,這道題考察了程序的魯棒性,主要是關於空指針以及k的取值問題        第一種思路:可以使用一個棧來實現,由於棧是後進先出的一種數據結構,我們可以將遍歷鏈表的節點存儲到棧中,接着彈棧k次即可得到倒數第

原创 表示數值的字符串 模擬

傳送門 //判斷一個字符串是否能顧表示一個數值 //模擬 class Solution { private: int done[10]; public: Solution() { memset(d

原创 樹的子結構 遞歸

傳送門 題意: 輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構) 注意:在操作樹的時候,我們一定要注意邊界條件的檢查,即檢查空指針,當樹A或樹B爲空的時候,定義相應的輸出。 如果沒有檢查並進行相應

原创 單向鏈表刪除節點兩種方式 刪除鏈表中重複的節點 注意邊界特殊情況

1.單向鏈表刪除節點兩種方式 通常對於單向鏈表,有兩種刪除方式:        1.記錄前面的一個節點,把被刪除節點的後繼設爲前驅節點的下一個節點,但是要注意頭結點的問題   時間複雜度爲O(n)        2.不需要記錄前驅節點,我

原创 兩個鏈表的第一個公共節點 棧(以空間換取時間) 快慢指針(避免空間消耗)

傳送門 題目描述 輸入兩個鏈表,找出它們的第一個公共結點。 分析: 1.由於是單向鏈表,所以如果兩個鏈表有公共節點,那麼從公共節點向後,一定是兩個鏈表相同的一段節點,我們需要從尾節點開始向前進行遍歷,這是棧的特點,我們遍歷兩個鏈表,並把節

原创 判斷序列是否是一棵二叉搜索樹的後序遍歷序列 思維 遞歸

傳送門 題意:輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。 分析:判斷一個序列是否是二叉搜索樹的後序遍歷,首先由二叉搜索樹的性質得知,二叉搜索樹

原创 包含min函數的棧 思維 藉助額外的輔助棧以空間換時間

傳送門 分析: 要求時間複雜度push,pop,min都是O(1),我們可以把每次的最小元素(之前的最小元素和新壓入棧的元素兩者的較小值)都保存起來放入另一個輔助棧中。如果每次都把最小元素壓入輔助棧,那麼能保證輔助棧的棧頂一直都是最小元素

原创 二叉樹中和爲某一值的路徑 dfs遞歸搜索 剪枝

傳送門 題目描述 輸入一顆二叉樹的根節點和一個整數,打印出二叉樹中結點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,數組長度大的數組靠前) 分析:由根節點向

原创 順時針打印矩陣 循環 標記 試探下一位

傳送門 循環,注意循環邊界條件 //設置標記數組,永遠關心下一位 const int maxn = 100+5; class Solution { private: bool done[maxn][maxn]; public:

原创 複雜鏈表的複製 哈希表以空間換時間O(n)

傳送門 題目描述 輸入一個複雜鏈表(每個節點中有節點值,以及兩個指針,一個指向下一個節點,另一個特殊指針指向任意一個節點),返回結果爲複製後複雜鏈表的head。(注意,輸出結果中請不要返回參數中的節點引用,否則判題程序會直接返回空) 分析

原创 第一個只出現一次的字符 哈希 最小的K個數 規定size的堆

第一次只出現一次的字符 分析:開闢done數組儲存每個字符的出現次數,然後遍歷字符串,時間複雜度O(n) //哈希表 class Solution { private: int done[60]; public: Sol