原创 包含min函數的棧

    題目:定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的min函數。在該棧中,調用min、push及pop的時間複雜度都是O(1)。        解題思路:把每次的最小元素都保存起來放到另外一個輔助棧裏。    C#實現

原创 從上往下打印二叉樹

    題目:從上往下打印出二叉樹的每個結點,同一層的結點按照從左到右的順序打印。    解題思路:每一次打印一個結點的時候,如果該結點有子結點,則把該結點的子結點放到一個隊列的末尾。接下來到隊列的頭部取出最早進入隊列的結點,重複前面的打印

原创 連續子數組的最大和

    題目:輸入一個整型數組,數組裏有正數也有負數。數組中一個或連續的多個整數組成一個子數組。求元素和值最大的那個子數組的和值。    C#實現:public static int FindGreatestSumOfSubArray(in

原创 數組中出現次數超過一半的數字

    題目:數組中有一個數字出現的次數超過數字長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1, 2,3, 2, 2, 2, 5, 4, 2}.由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。    解題思路:數組

原创 Redis命令

字符串命令命令行爲GET獲取存儲在給定鍵中的值SET設置存儲在給定鍵中的值DEL刪除存儲在給定鍵中的值(此命令可以用於所有類型)INCRINCR   key-name --- 將鍵存儲的值加上1DECRDECR   key-name ---

原创 二叉搜索樹與雙向鏈表

    題目:輸入一棵二叉搜索樹,將該二叉樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。    解題思路:在二叉樹中,每個結點都有兩個指向子結點的指針。在雙向鏈表中,每個結點也有兩個指針。在搜索二叉樹中左

原创 Linux學習筆記

命令 --help  命令的簡單幫助man == 命令幫助help == 命令的幫助(bash的內置命令)ls == 查看目錄列表 -l(long) -d(directory)mkdir == make directory 作用是創建目錄,

原创 二叉樹中和爲某一值的路徑

    題目:輸入一棵二叉樹和一個整數,打印出二叉樹中結點值的和爲輸入整數的所有路徑。從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。    解題思路:當用前序遍歷的方式訪問到某一結點時,把該結點添加到路徑上,並累加該結點的值。如

原创 複雜鏈表的複製

    題目:複製一個複雜鏈表。在複雜鏈表中,每個結點除了有一個next指針指向下一個結點外,還有一個sibling指向鏈表中的任意結點或者null。    解題思路:第一步,根據原始鏈表的每個結點N創建對應的N',把N'鏈接在N的後面;第

原创 字符串的排列

    題目:輸入一個字符串,打印出該字符串中字符的所有的排列。例如輸入字符串abc,則打印出由字符a、b、c所能排列出來的所有字符串。    解題思路:把字符串分爲兩部分,一部分是字符串的第一個字符,另一部分是第一個字符以後的所有字符。接

原创 順時針打印矩陣

    輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字。    解題思路:我們把打印一圈分爲四步:第一步從左到右打印一行,第二步從上到下打印一列,第三步從右到左打印一行,第四步從下到上打印一列。值得注意的是,最後一圈有可能退化

原创 棧的壓入、彈出序列

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

原创 樹的子結構

    輸入兩棵二叉樹A和B,判斷B是不是A的子結構    C#實現:#region 樹的子結構         /// 輸入兩棵二叉樹A和B,判斷B是不是A的子結構         ///          public static b

原创 二叉樹的鏡像

    請完成一個函數,輸入一個二叉樹,該函數輸出它的鏡像。    解題過程:先前序遍歷樹的每個結點,如果遍歷到結點有子結點,交換它的兩個子結點。當交換完所有非葉子結點的左右子結點之後,就得到了樹的鏡像。    C#實現方式:#region

原创 Java實現二叉樹的遍歷

    Java實現二叉樹的遍歷public class BinaryTreeNode { int value; BinaryTreeNode left; BinaryTreeNode right; // 前序遍歷 public