原创 Python 從尾到頭打印鏈表

用Python實現鏈表的順序打印: # -*- coding:utf-8 -*- # -*- coding:utf-8 -*- class ListNode: def __init__(self, x):

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

輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的節點,只能調整書中節點指針的指向。 class TreeNode: def __init__(self, x): self.v

原创 Python 樹的子結構

輸入兩顆二叉樹A,B, 判斷B是不是A的子結構。約定空樹不是任何數的子結構 class Solution: def HasSubtree(self, pRoot1, pRoot2): if pRoot1 =

原创 Python 二叉樹的鏡像

操作給定的二叉樹,將其變換爲原二叉樹的鏡像。 class TreeNode: def __init__(self, x): self.val = x self.next = None c

原创 Python 不用加減乘除做加法

寫一個函數,求兩個整數之和,要求在函數體內不得使用+,-,*,/四則運算符 # -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2):

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

輸入一顆二叉樹的根節點和一個整數,打印出二叉樹中節點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根節點開始往下已知到葉節點所經過的節點所形成的一條路徑。在返回值的list中,數組長度大的數組靠前。 class TreeNode:

原创 Python 數據流中的中位數

如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從數據流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用Insert()方法讀取數據流,使用

原创 Python 重建二叉樹

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

原创 Python 連續子數組的最大和

給一個數組,返回它的最大連續子序列的和。 例如{6,-3,-2,7,-15,1,2,2}連續子序列的和爲8(從第0個開始,到第3個爲止) # -*-coding:utf-8 -*- class Solution: def

原创 面試中常用的算法——遞歸、回溯

排序算法 冒泡排序/Bubble Sort 插入排序/Insertion Sort 歸併排序/Merge Sort 快速排序/Quick Sort 拓撲排序/Topological Sort 遞歸和回溯/Recursion & B

原创 Python 序列化二叉樹

實現兩個函數,分別用來序列化和反序列化二叉樹 #-*- coding:utf-8 -*- class TreeNode: def __init__(self,x): self.val = x

原创 Python 對稱的二叉樹

請實現一個函數,用來判斷一棵二叉樹是不是對稱的。如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。 #-*- coding:utf-8 -*- class TreeNode: def __init__(self,x)

原创 Python 二叉搜索樹的第k個節點

給定一棵二叉搜索樹,請找出其中的第k小的節點。例如,(5,3,7,2,4,6,8)中,按節點數值大小排序第三小的節點值爲4 #-*- coding:utf-8 -*- class TreeNode: def __init_

原创 算法中的易錯知識點集錦

子序列不同於子數組 子數組一定是連續的,子序列不一定是連續的。 字符串的子串也是連續的。 長度爲n的數組 非空子數組的個數:n*(n+1)/2 非空子序列的個數:2^n-1 長度爲n的字符串 非空子串的個數:n*(n+1)/2

原创 面試中常用的算法——排序

學習算法的好處 學習算法的過程其實是一個提高思維能力的過程。 基本的排序算法(簡單直接幫助迅速寫出沒有bug的代碼) 冒泡排序/Bubble Sort 插入排序/Insertion Sort 常考的排序算法(解決絕大部分設計排序問