面試題(錯題)知識點總結

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比較

  1. HashMap:適用於在Map中插入、刪除和定位元素。 
  2. Treemap:適用於按自然順序或自定義順序遍歷鍵(key)。 
  3. HashMap通常比TreeMap快一點(樹和哈希表的數據結構使然),建議多使用HashMap,在需要排序的Map時候才用TreeMap. 
  4. HashMap 非線程安全 TreeMap 非線程安全 
  5. HashMap的結果是沒有排序的,而TreeMap輸出的結果是排好序的

8、最小生成樹之克魯斯卡爾(Kruskal)算法(最小生成樹)

è¿éåå¾çæè¿°

9、最小生成樹之普里姆(Prim)算法(有權連通圖)

  1. 過程:
  • 首先尋找一個起始結點,查看與這個結點相連的結點,找到權值最小的結點
  • 之後再尋找與這兩個結點相連的結點並且權值最小的結點
  • 重複上述過程,當所有點找到時,那麼結束程序

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修飾屬性,此屬性就是一個常量,不能被再次賦值! 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章