原创 【劍指Offer】No.7 重建二叉樹

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

原创 【劍指Offer】No.24 反轉鏈表

題目描述 輸入一個鏈表,反轉鏈表後,輸出新鏈表的表頭。 解題思路 創建一個新的頭節點,將原鏈表的所有結點通過頭插法插入新的頭節點之後。最終返回新的頭節點的next即爲所求結果。 /* public class ListNode

原创 【劍指Offer】No.27 平衡二叉樹

題目描述 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 平衡二叉樹:平衡二叉樹的左右子樹也是平衡二叉樹,那麼所謂平衡就是左右子樹的高度差不超過1. 解題思路 這道題從定義出發,檢查每一個左子樹與右子樹的高度差。所以基於求二叉樹的深

原创 【劍指Offer】No.20 表示數值的字符串

題目描述 請實現一個函數用來判斷字符串是否表示數值(包括整數和小數)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"1

原创 【劍指Offer】 No.32 從上到下打印二叉樹

題目描述 從上往下打印出二叉樹的每個節點,同層節點從左至右打印。(層次遍歷) import java.util.*; /** public class TreeNode { int val = 0; TreeNode

原创 【劍指Offer】No.8 二叉樹的下一個節點

題目描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。 /* public class TreeLinkNode { int val;

原创 【LeetCode】No.111 二叉樹的最小深度

題目含義解釋: 給定一個二叉樹,找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明: 葉子節點是指沒有子節點的節點。 遞歸算法求二叉樹最小深度 /** * Definition for a bin

原创 【劍指Offer】No.27 二叉樹的鏡像

題目描述 操作給定的二叉樹,將其變換爲源二叉樹的鏡像。 例如: 源二叉樹 鏡像二叉樹 8 8

原创 【劍指Offer】No.35 複雜鏈表的複製

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

原创 【劍指Offer】No.9 用兩個棧實現隊列

題目描述 用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。 import java.util.Stack; public class Solution { Stack<Integer>

原创 【劍指Offer】No.45 把數組排成最小的數

題目描述 輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組{3,32,321},則打印出這三個數字能排成的最小數字爲321323。 解題思路 不能對比元素之間的大小,需要根據元

原创 【劍指Offer】No.58 翻轉字符串 之 翻轉單詞順序

題目描述 牛客最近來了一個新員工Fish,每天早晨總是會拿着一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這

原创 【劍指Offer】No.56 數組中數字出現的次數

題目描述 一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。 解題思路 題目中是有兩個數組僅出現一次,其他元素出現兩次。那如果只有一個元素出現一次,其他元素出現兩次。我們可以如何解決? 如果

原创 【劍指Offer】No.34 二叉樹中和爲某一值的路徑

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

原创 【劍指Offer】No.28 對稱的二叉樹

題目描述 請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。 解題思路 二叉樹的先序遍歷是先根再左再右;我們針對此定義其對稱遍歷算法爲先根再再右左。即再遍歷過程中,對這棵樹