什麼是樹
1.樹的概念:
2.樹的分類
按樹是否平衡來劃分
樹的遍歷
public void preorder (arraylistiter)
public void inorder(arrayiteratoriter)
public void postorder(arrayiteratoriter)
public void levelorder(treenode root)
if(temp.right!=null)}}
二叉樹
操作:二叉查詢樹實現
遞迴實現
public void find(t element)
private void find(binarytreenode root, t element)
int comparable = element.compareto(root.getelement);
if (comparable > 0)
else if (comparable < 0)
else
}
若所插入結點的元素大於或等於根結點的元素
刪除二叉查詢樹的刪除我感覺很複雜,那乙個二叉排序樹實踐的刪除操作做了我兩個小時。
我們先來討論一下刪除的情況:
public leaf findparent(int a)
}else
break;
}return parent;
}
- 三種情況的**:
public void delete(int a)
else if(parent.left==current)
}else if(current.right!=null&¤t.left!=null)
else if(current.left!=null&¤t.right==null)
else
}
左旋和右旋
右左旋和左右旋
問題2:為什麼二叉查詢樹不平衡,查詢效率就會變低
問題2解決方法:
問題3:書上決策樹中提到的is-a關係是什麼關係?
問題3解決方法:
我的理解:is-a,例如hupo is a student,胡泊是乙個學生,胡泊就繼承了學生的所有屬性與功能,但胡泊是學生的乙個特例,即胡泊同時還具有其他屬性。
else if(current.right!=null&¤t.left!=null)
**的功能就是找到前驅結點,將值賦給刪除結點,然後遞迴刪除前驅結點(這裡刪的是值等於p的結點!!)
也就是說我在將前驅結點的值賦給了被刪結點後,再呼叫delete方法刪除值等於p的結點,於是就反覆刪除該結點,而真正要被刪除的前驅結點卻依然存在,最終導致一直滑到了最小的結點
解決方法:找到了原因,解決它其實很簡單,就是將刪除與賦值的順序反過來,先將前驅節點的值儲存到變數p中,然後刪除前驅結點,最後將p賦給被刪結點,就完成了。**如下:
正確答案: c 我的答案: b
**中值得學習的或問題:
基於評分標準,我給本部落格打分:14分。得分情況如下:
正確使用markdown語法(加1分):
模板中的要素齊全(加1分)
教材學習中的問題和解決過程(2分)
**除錯中的問題和解決過程(3分)
本週有效**超過300分行的(加1分)
其他加分:
**行數(實際/預期)
部落格量(新增/累積)
學習時間(新增/累積)
重要成長
目標10000行
第一周119/119
3/320/20
第二週302/300
2/525/45
第三週780/800
2/725/70
第四周1500/1300
2/925/95
第五周3068/2500
3/12
25/120
第六周4261/4000
2/14
25/145
第七、八周
7133/7000
3/17
25/170
第九周10330/10000
3/20
25/195
第9周作業
題1 檢視記憶體占用情況 root use01 ps auxh awk sort k 2 t nr head 6595 1.7 6049 1.4 6104 0.8 6097 0.6 6048 0.6 6853 0.5 6733 0.4 6732 0.4 6598 0.4 6596 0.4題2 迴圈p...
部落格第9周
1.計算 100 以內所有能被 3 整除的整數之和 bin bash sum 0 for i in do if 0 eq i 3 then echo i let sum i fiecho sum sum done 或seq s 3 3 100 bc 2.編寫指令碼,求 100 以內所有正奇數之和 b...
第9周程式設計作業
敲 是真的累,這章要打好多字 題目內容 設計乙個person類,包含name age 屬性以及對這些屬性操作的方法。實現並測試這個類。根據類的封裝性要求,把name age 宣告為私有的資料成員,宣告公有的成員函式register showme 來訪問這些屬性,在register 函式中對資料成員進...