原创 二叉樹的遞歸與非遞歸遍歷實現

參閱資料:http://blog.csdn.net/ns_code/article/details/12977901 二叉樹是很常見的數據結構, 它的遍歷方式有遞歸和非遞歸兩種,其中遞歸方式易於實現,而非遞歸的方式往往效率更高,

原创 LeetCode 292. Nim Game

很簡單的一道Nim遊戲題 class Solution { public: bool canWinNim(int n) { return n % 4 != 0; } };

原创 二叉搜索樹(BST)遞歸與非遞歸的插入、刪除、查找的實現

昨天碰到了二叉搜索樹(BST)這種數據結構,索性詳細的學習了一遍。 BST的定義: 如果一棵樹的左子樹不爲空,那麼其所有節點的值均小於其根結點的值,如果右子樹不爲空,那麼其所有節點的值均大於其根結點的值,它的左右子樹也滿

原创 LeetCode 104. Maximum Depth of Binary Tree

題意:求一棵二叉樹的高度 思路:這裏要說一下非遞歸的寫法,就是bfs逐層遍歷整棵二叉樹,當遍歷完一層深度就加一,這裏也用到了queue的FIFO特性。 遞歸: class Solution { public: int

原创 LeetCode 237. Delete Node in a Linked List

題意:給你一個單向鏈表,刪除一個非末節點。 class Solution { public: void deleteNode(ListNode* node) { if(node == NULL || nod

原创 LeetCode 100. Same Tree

題意:判定兩顆二叉樹是否相同 非遞歸的寫法就是bfs逐層遍歷 遞歸: class Solution{ public: bool isSameTree(TreeNode *p, TreeNode *q){

原创 LeetCode 226. Invert Binary Tree

題意:給你一顆二叉樹,讓你將這棵樹反轉。 思路:可以使用遞歸與非遞歸兩種方式,沒什麼好說的。。。 遞歸: class Solution{ public: TreeNode *invertTree(TreeNode *r

原创 劍指offer 從尾到頭打印鏈表

題目描述: 輸入一個鏈表,從尾到頭打印鏈表每個節點的值。 思路: 很多方法,最有用的就是真的實現一個鏈表然後進行操作。 一開始我的做法是每次插入先從頭結點遍歷到尾結點,然後進行插入操作,但是TLE了,最後發現其實插入操作只需

原创 LeetCode 242. Valid Anagram

題意:問你兩個字符串裏面所包含的字符是否相同 class Solution { public: bool isAnagram(string s, string t) { if(s.length() != t

原创 LeetCode 217. Contains Duplicate 哈希

題意:給你一個數組,問你其中有沒有相同的元素。 思路:這個題有1W種解法,但是爲了練習嘛,我就選了用哈希表來做這道題目。。。雖然麻煩。。但是達到了訓練的目的。。。 class Solution{ private: con

原创 LeetCode 13. Roman to Integer

題意:羅馬數字轉十進制數字 思路:首先要知道一些羅馬數字的組合規則: I:1 V:5 X:10 L:50 C:100 D:500 M:1000 小的在大的前面相減,如:IV:4,CD:400 打的在小的前面相加,如:VI:6

原创 LeetCode 283. Move Zeroes

題意:將所有的0移動到數組最後面 class Solution{ public: void moveZeroes(vector<int> &nums){ int zeroes = 0; fo

原创 劍指offer 二維數組中的查找

題目描述: 在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 思路:我們都能想到O(n2)的算法。 但是有一

原创 劍指offer 包含min函數的棧

題目描述: 定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。 思路:這題的難點在於維護最小值。我們可以定義一個結構體,保存當前的值,並且保存到目前爲止的最小值,這樣,刪除操作後,它的最小值的查詢操作就是O(1)。這

原创 劍指offer 數組中只出現一次的數字

題目描述: 一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。 思路: 如果只有一個數字只出現一次,那麼我們直接異或所有數字,最終的結果就是所求。這裏用到了異或的兩個性質:AxorA=0 和 Ax