特點:
(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敏捷程式設計來完成此次任務,在團隊合作的時候提高...