20172318 2018-2019-1 《程序設計與數據結構》第7周學習總結
20172318 2018-2019-1 《程序設計與數據結構》第7周學習總結
教材學習內容總結
二叉查找樹
- binarysearchtree: 二叉查找樹 二叉查找樹是一種含有附加屬性的二叉樹,即其左孩子小於父結點,而父結點又小於或等於右孩子
- 二叉查找樹的定義是二叉樹定義的擴展·
- 每個BinaryTreeNode對要維護一個指向結點所存儲元素的引用,另外還要維護指向結點的每個孩子的引用·
- 從二又查找樹中刪除一個元素時,必須推選出另一個結點來代替要被刪除的那個結點。
- 二叉查找樹的最石側結點會存放最大元素,而其最左側結點會存放最小元素.
- 用有序列表實現二叉查找樹
- 樹的主要使用之一就是為其他集合提供高效的實現
- BinarySearchTreeList實現的分析
- 平衡二叉查找樹
- 如果二叉查找樹不平衡,其效率可能比線性結構的還要低·
- degeneratetree:蛻化樹 無分支的樹。
- rightrotation:右旋 當最長路徑是根結點的左孩子的左子樹時,一種用於使二叉樹平衡的單向旋轉策略
- leftrotation:左旋 當最長路徑是根結點的右孩子的右子樹時,一種用於使二又樹平衡的單向旋轉策略.
- rightleftrotation:右左旋 當最長路徑是根結點的右孩子的左子樹時,一種用於使二叉樹平衡的雙向旋轉策略。
- leftrightrotation:左右旋 當最長路徑是根結點的左孩子的右子樹時,一種用於使二叉樹平衡的雙向旋轉策略。
- 實現二叉查找樹:AVL樹
- AVL tree:AVL樹 使用每個結點的平衡因子來保持二叉查找樹平衡的策略。
- balancefactor:平衡因子 結點的一種屬性,通過用右子樹高度減去左子樹高度計算而來。如果計算結果大於1或小於一1,那麽該樹就是不平衡的。
- 樹〔或樹的任何子樹)只有兩種途徑能變得不平衡:插入結點或刪除結點.
AVL樹的右旋
- AVL樹的左旋
AVL樹的右左旋
- AVL樹的左右旋
- 實現二叉查找樹:紅黑樹
- red/blacktree:紅黑樹 使用與每個結點相關的顏色(紅色或黑色)來保持二叉查找樹平衡的策略。
- 在某種程度上,紅黑樹中的平衡限制沒有AVL樹那麽嚴格·但是,它們的序仍然是logn
- 紅黑樹中的元素插入
- 紅黑樹中的元素刪除
教材學習中的問題和解決過程
問題1:.紅黑樹從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點這句話怎麽理解?中間的情況是否與這句話有出入?
問題1解決方案:這有個條件:確保沒有一條路徑會比其他路徑長出倆倍
- 問題2:.為什麽紅黑樹中所有的葉子結點為NIL結點且顏色為黑,而不是NULL?NIL結點存在的意義是什麽?
問題2解決方案:在紅黑樹的刪除算法中,有這麽一種情況
這種情況下,S的左孩子與右孩子必為NIL,否則原來的紅黑樹就不平衡.
那麽在對P的向上遞歸過程中,也會出現這種情況,即對應的S及S的孩子全為黑色.
NIL結點的意義就在於:向上遞歸的過程中識別出這種情況
代碼調試中的問題和解決過程
無
上周考試錯題總結
There are four basic methods for traversing a tree: preorder, inorder, postorder, and level-order.
- 錯題1
A . Top down, bottom up, inorder, and postorder
B . Top down, inorder, postorder, and level-order
C . Bottom up, preorder, in order, and postorder
D . preorder, inorder, postorder, and level-order
選D,看錯
- 錯題2
The simulated link strategy does not allow array positions to be allocated contiguously regardless of the completeness of the tree.
A . True
B . False
選B,模擬鏈接策略允許連續分配數組位置而不用考慮該樹的完全性。
- 錯題3
In general, a balanced n-ary tree with m elements will have height lognm.
A . True
B . False
選A,具有m個元素的平衡n元樹的高度為lognm
代碼托管
點評過的同學博客和代碼
- 本周結對學習情況
- 20172312
- 課本內容總結有自己的理解,圖片較少
- 結對學習內容
- 課本第十章
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 0/0 | 1/1 | 8/8 | |
第二周 | 500/500 | 1/2 | 15/ 23 | |
第三周 | 802/1302 | 1/3 | 12/35 | |
第四周 | 1530/2832 | 2/5 | 15/50 | |
第五周 | 1165/3997 | 1/6 | 10/60 | |
第六周 | 1169/5166 | 1/7 | 15/75 | |
第七周 | 843/6039 | 1/8 | 15/90 |
參考資料
- 《Java軟件結構與數據結構教程(第四版)》
20172318 2018-2019-1 《程序設計與數據結構》第7周學習總結