原创 如何判斷一棵樹是不是完全二叉樹

完全二叉樹 子節點從左往右生長,一層生長完全纔可以生長下一層. 解題思路:         橫向遍歷(按層)二叉樹的過程中,每個節點的子節點有以下四種情況:         1-左右都沒有 : 該節點爲葉子節點         2-左右都

原创 已知一個完全二叉樹,求其節點個數

[要求] : 時間複雜度低於O(N). 解題思路: 根據完全二叉樹的定義可以知道,如果一個節點的右子樹生長到了整棵樹的最頂端,那麼這棵樹的左子樹一定是一棵滿二叉樹. 如果右子樹沒有生長到最頂端,那右子樹一定是一棵滿二叉樹,只不過高度 -

原创 二叉樹的序列化和反序列化

題目其實就是將二叉樹轉化成字符串同時保留樹的空間信息.可以用空佔位符佔住空節點的位置,用來描述樹的實際結構. 先序遍歷的方式序列化代碼如下: public static String serialByPre(Node head){

原创 在二叉樹中找到一個節點的後繼節點

【 題目】 現在有一種新的二叉樹節點類型如下:   public class Node { public int value; public Node left; public Node right; public Nod

原创 單向鏈表按值劃分

【 題目】 給定一個單向鏈表的頭節點head, 節點的值類型是整型, 再給定一個整 數pivot。 實現一個調整鏈表的函數, 將鏈表調整爲左部分都是值小於 pivot的節點, 中間部分都是值等於pivot的節點, 右部分都是值大於 piv

原创 如何判斷一個鏈表是否是迴文結構

迴文結構: 把中間作爲起點,往左和往右的內容相同. 提供了三種解法: 1-額外空間複雜度爲O(n) : 創建一個stack,將list中的數據遍歷存到stack中,然後判斷stack.pop.data是否等於list.next.value

原创 打印兩個有序鏈表的公共部分

【 題目】 給定兩個有序鏈表的頭指針head1和head2, 打印兩個 鏈表的公共部分。   相等則打印出數據並且兩個指針一起往下移動,不相等則小的那個往後移動(因爲是排序的) public static void printEqua

原创 冒泡排序(Bubble Sort)

從第一個元素開始,讓前一個元素和後一個元素進行比較,大的放後邊.循環n次,每次選出數組中剩下部分最大的那個放後邊. 第一輪比較n次,第二輪比較n-1次.   public class BubbleSort { public st

原创 在行列都排好序的矩陣中找數

【 題目】 給定一個有N*M的整型矩陣matrix和一個整數K,matrix的每一行和每一 列都是排好序的。 實現一個函數, 判斷K是否matrix中。 若數據如下 { {0,1,2,5}, {2,3,4,7}, {4,4,4,8},

原创 隊列和棧的轉化

1- 如何僅用隊列結構實現棧結構? 使用兩個隊列,一個data隊列一個help隊列. 加入壓棧五個數之後要彈出第五個數,兩個隊列的操作就是,壓棧五個數正常存入data隊列,彈棧的時候前四個數先進help隊列,data隊列中的數當做彈棧的數

原创 桶排序 -- 計數排序

桶排序是不基於比較的排序,是一個大的概念.其 實現 有計數排序和基數排序. 桶排序受數據狀況本身影響特別嚴重.   計數排序 如果知道一個待排序數組中的值是0~60,桶排序的步驟如下 1-建立一個可以包含範圍內所有數據的數組,即長度爲61

原创 小和問題(歸併排序解法)

在一個數組中,每一個數左邊比當前數小的數累加起來,叫做這個數組的小和。求一個數組 的小和。 例子: [1,3,4,2,5] 1左邊比1小的數,沒有; 3左邊比3小的數,1; 4左邊比4小的數,1、3; 2左邊比2小的數,1; 5左邊比5小

原创 快速排序(QuickSort)

經典快排   快速排序是選定數組最後一個值作爲標準值,小於等於該值的數移動到數組左側,大於該值的數移動到數組右側.遞歸執行以上步驟.   public class QuickSort { /** * 快速排序是選定數組

原创 轉圈打印矩陣

【 題目】 給定一個整型矩陣matrix, 請按照轉圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 1415 16 打印結果爲: 1, 2, 3, 4, 8, 12, 16, 15, 14, 13,

原创 貓狗隊列

【 題目】 寵物、 狗和貓的類如下:   class Pet { private String type; public Pet(String type) { this.type = type;