LeetCode程式設計集訓第4次

2021-09-05 03:42:51 字數 3494 閱讀 9244

特點:

(1)每個結點有零個或多個子結點

(2)沒有父節點的結點稱為根節點

(3)每乙個非根結點有且只有乙個父節點

(4)除了根結點外,每個子結點可以分為多個不相交的子樹。

特點:(1)二叉樹第i層上的結點數目最多為2i-1(i>=1)

(2)深度為k的二叉樹至多有2k-1個結點(k>=1)

(3)包含n個結點的二叉樹的高度至少為(log2n)+1

(4)在任意一棵二叉樹中,若終端結點的個數為n0,度為2的結點數為n2,則n0=n2+1

二叉樹遍歷:從樹的根節點出發,按照某種次序依次訪問二叉樹中所有的結點,使得每個結點被訪問僅且一次。

1、前序遍歷

基本思想:先訪問根結點,再先序遍歷左子樹,最後再先序遍歷右子樹即根—左—右。

2、中序遍歷

基本思想:先中序遍歷左子樹,然後再訪問根結點,最後再中序遍歷右子樹即左—根—右。

3、後序遍歷

基本思想:先後序遍歷左子樹,然後再後序遍歷右子樹,最後再訪問根結點即左—右—根。

4、層次遍歷

基本思想:用乙個佇列儲存被訪問的當前節點的左右孩子以實現層序遍歷。

內容描述:

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。

假設乙個二叉搜尋樹具有如下特徵:

示例 1:

輸入:

2/ \

1 3

輸出: true

示例 2:

輸入:

5/ \

1 4

/ \3 6

輸出: false

解釋: 輸入為: [5,1,4,null,null,3,6]。

根節點的值為 5 ,但是其右子節點值為 4 。

解題方案:思路:

用遞迴的思想。

如果節點為空,則返回true。

若左子樹不空的時候,其根結點大於左子樹的最大值——左子樹的右下角的結點。

左子樹返回為真且右子樹也為真則返回真。考慮右子樹時,根要比右子樹的最小值小—最左左下角的結點。

**:

class solution(object):

def isvalidbst(self, root):

""":type root: treenode

:rtype: bool

"""return self.valid(root, none, none)

def valid(self, root, min, max):

if root == none or root.val == none:

return true

if (min is not none and root.val <= min) or (max is not none and root.val >= max):

print(1)

return false

return self.valid(root.left, min, root.val) and self.valid(root.right, root.val, max)

執行結果:

內容描述:

給定乙個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

例如:給定二叉樹:[3,9,20,null,null,15,7],

3

/ \9 20

/ \

15 7

返回其層次遍歷結果:

[

[3],

[9,20],

[15,7]

]

解題方案:思路:

用深度優先搜尋(dfs),節點的深度與輸出結果陣列的下標相對應。

**:

class solution(object):

def levelorder(self, root):

""":type root: treenode

:rtype: list[list[int]]

"""res =

self.dfs(root, 0, res)

return res

def dfs(self, root, depth, res):

if root == none:

return res

if len(res) < depth+1:

self.dfs(root.left, depth+1, res)

self.dfs(root.right, depth+1, res)

執行結果:

內容描述:

給定乙個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)

例如:給定二叉樹[3,9,20,null,null,15,7],

3

/ \9 20

/ \

15 7

返回其自底向上的層次遍歷為:

[

[15,7],

[9,20],

[3]]

解題方案:思路:

採用層次遍曆法,並翻轉。

**:

class solution(object):

def help(self, root, level, ans):

if root:

if len(ans) < level + 1:

self.help(root.left, level + 1, ans)

self.help(root.right, level + 1, ans)

def levelorderbottom(self, root):

""":type root: treenode

:rtype: list[list[int]]

"""ans =

self.help(root, 0, ans)

ans.reverse()

return ans

執行結果:

0401303 2013211495 第4次作業

2 關係模式 學生 學號,姓名,出生日期,系名,班號,宿舍區 班級 班號,專業名,系名,人數,入校年份 系 系名,系號,系辦公室地點,人數 學會 學會名,成立年份,地點,人數 學生 學會 學號,學會名,入會年份 1 學生 學號,姓名,出生日期,系名,班號,宿舍區 最小函式依賴集 學號 姓名,學號 系...

第4次作業

實踐最簡答的專案wordcount,必須完成其中的基本功能,若可以完成其他功能給予加分。完成後請將你的設計思路 主要 寫在本次作業部落格裡。要求三 學習總結和進度 30分 1 將pta作業的源 使用git提交到託管平台上,要求給出上傳成功截圖和你的git位址。請注意git位址應是類似 這樣的字串且是...

第4次作業

第一部分 先列出本次採用scrum敏捷程式設計的任務完成情況,並寫出心得 學生們丟東西的頻率越來越高,所以丟失東西之後找回就很重要,但是又比較難找回。我們的學生可以在平台上招領及尋找失物,以及發布招領資訊,為學生帶來了便捷。本次開發我們使用了scrum敏捷程式設計來完成此次任務,在團隊合作的時候提高...