1、含有n個結點的二叉樹的種類:C(n)=(1/(n+1))*((2*n)!/(n!*n!));
2、在選擇題中,要注意switch語句中的break,沒有就繼續執行switch語句,有就結束執行;
3、度與結點數的公式可得 N-1=1*N1+2*N2+...+m*Nm (N表示總結點個數,N1表示含有一個子樹,Nm表示含有m個子樹)
4、哈夫曼樹中只有度爲1的(葉子)結點和度爲2的結點
5、二叉樹中設度爲M,結點數爲N,則:N=M+1(M=N0*0+N1*1+N2*2 . . .)
6、循環隊列,其隊頭指針爲front,隊尾指針爲rear;循環隊列長度爲N。其隊內有效長度爲:(rear - front + N) % N(假設隊頭不存放數據) ; 如果front中也存放數據時,則結果爲:(rear-front+1+N)% N
7、HashMap的底層是以數組的形式進行存儲的,將key-value對作爲數組中的一個元素進行存儲
- Map.put()的時候,需要將key值映射爲相應的hash值,key的值是以char數組的形式存放的,value對應的值也是有char數組存放的
-
HashMap和TreeMap比較
- HashMap:適用於在Map中插入、刪除和定位元素。
- Treemap:適用於按自然順序或自定義順序遍歷鍵(key)。
- HashMap通常比TreeMap快一點(樹和哈希表的數據結構使然),建議多使用HashMap,在需要排序的Map時候才用TreeMap.
- HashMap 非線程安全 TreeMap 非線程安全
- HashMap的結果是沒有排序的,而TreeMap輸出的結果是排好序的
8、最小生成樹之克魯斯卡爾(Kruskal)算法(最小生成樹)
9、最小生成樹之普里姆(Prim)算法(有權連通圖)
- 過程:
- 首先尋找一個起始結點,查看與這個結點相連的結點,找到權值最小的結點
- 之後再尋找與這兩個結點相連的結點並且權值最小的結點
- 重複上述過程,當所有點找到時,那麼結束程序
10、平衡二叉樹的四種方式
- 左子樹深度 - 右子樹深度=平衡因子
- 若向平衡二叉樹中插入一個新結點後破壞了平衡二叉樹的平衡性。首先要找出插入新結點後失去平衡的最小子樹根結點的指針。然後再調整這個子樹中有關結點之間的鏈接關係,使之成爲新的平衡子樹。當失去平衡的最小子樹被調整爲平衡子樹後,原有其他所有不平衡子樹無需調整,整個二叉排序樹就又成爲一棵平衡二叉樹。
-
失去平衡的最小子樹是指以離插入結點最近,且平衡因子絕對值大於 1 的結點作爲根的子樹。假設用 A 表示失去平衡的最小子樹的根結點,則調整該子樹的操作可歸納爲下列四種情況。
-
( 1 ) LL 型平衡旋轉法
由於在 A 的左孩子 B 的左子樹上插入結點 F ,使 A 的平衡因子由 1 增至 2 而失去平衡。故需進行一次順時針旋轉操作。 即將 A 的左孩子 B 向右上旋轉代替 A 作爲根結點, A 向右下旋轉成爲 B 的右子樹的根結點。而原來 B 的右子樹則變成 A 的左子樹。
( 2 ) RR 型平衡旋轉法
由於在 A 的右孩子 C 的右子樹上插入結點 F ,使 A 的平衡因子由 -1 減至 -2 而失去平衡。故需進行一次逆時針旋轉操作。即將 A的右孩子 C 向左上旋轉代替 A 作爲根結點, A 向左下旋轉成爲 C 的左子樹的根結點。而原來 C 的左子樹則變成 A 的右子樹。
( 3 ) LR 型平衡旋轉法
由於在 A 的左孩子 B 的右子數上插入結點 F ,使 A 的平衡因子由 1 增至 2 而失去平衡。故需進行兩次旋轉操作(先逆時針,後順時針)。即先將 A 結點的左孩子 B 的右子樹的根結點 D 向左上旋轉提升到 B 結點的位置,然後再把該 D 結點向右上旋轉提升到 A 結點的位置。即先使之成爲 LL 型,再按 LL 型處理 。
如圖中所示,即先將圓圈部分先調整爲平衡樹,然後將其以根結點接到 A 的左子樹上,此時成爲 LL 型,再按 LL 型處理成平衡型。
( 4 ) RL 型平衡旋轉法
由於在 A 的右孩子 C 的左子樹上插入結點 F ,使 A 的平衡因子由 -1 減至 -2 而失去平衡。故需進行兩次旋轉操作(先順時針,後逆時針),即先將 A 結點的右孩子 C 的左子樹的根結點 D 向右上旋轉提升到 C 結點的位置,然後再把該 D 結點向左上旋轉提升到 A 結點的位置。即先使之成爲 RR 型,再按 RR 型處理。
如圖中所示,即先將圓圈部分先調整爲平衡樹,然後將其以根結點接到 A 的左子樹上,此時成爲 RR 型,再按 RR 型處理成平衡型。
平衡化靠的是旋轉。 參與旋轉的是 3 個節點(其中一個可能是外部節點 NULL ),旋轉就是把這 3 個節點轉個位置。注意的是,左旋的時候 p->right 一定不爲空,右旋的時候 p->left 一定不爲空,這是顯而易見的。
如果從空樹開始建立,並時刻保持平衡,那麼不平衡只會發生在插入刪除操作上,而不平衡的標誌就是出現 bf == 2 或者 bf == -2的節點。
11、雙端隊列中的輸入受限,和輸出受限
- 輸入受限:只能從一端輸入
- 輸出受限:只能從一端輸出
12、
13、final的特點:
- final修飾類、方法、屬性!不能修飾抽象類,因爲抽象類一般都是需要被繼承的,final修飾後就不能繼承了。
- final修飾的方法不能被重寫而不是重載!
- final修飾屬性,此屬性就是一個常量,不能被再次賦值!