2014-04-06 52 views
1

該算法用於逐級打印普通二叉樹。該函數用於按級別打印二叉樹級別的時間和空間複雜度

什麼是printSpecificLevel_BT()printBT_LBL()的時間複雜度和空間複雜度?

我認爲printSpecificLevel_BT的時間複雜度爲O(lg N),空間複雜度爲O(lg N)
我認爲printBT_LBL()的時間複雜度爲O((lgN)^2),空間複雜度爲O((lgN)^2)

這是正確的嗎?

// Print the specific level of a binary tree. 
public static void printSpecificLevel_BT (Node root, int level) { 
    if (root == null) return; 
    if (level == 0) System.out.print(String.format("%-6d", root.data)); // Base case. 
    // Do recrusion. 
    printSpecificLevel_BT(root.leftCh, level - 1); 
    printSpecificLevel_BT(root.rightCh, level - 1); 
} 

// Get the height of a binary tree. 
public static int getHeight_BT (Node root) { 
    if (root == null || (root.leftCh == null && root.rightCh == null)) return 0; // Base case. 
    return 1 + Math.max (getHeight_BT(root.leftCh), getHeight_BT(root.rightCh)); 
} 

// Print a binary tree level by level. 
public static void printBT_LBL (Node root) { 
    // Get the height of this binary tree. 
    int height = getHeight_BT(root); 
    for (int i = 0; i <= height; i ++) { 
     printSpecificLevel_BT(root, i); 
     System.out.println(); 
    } 
} 
+1

什麼*你*覺得它是什麼? –

+0

我認爲「printSpecificLevel_BT」的時間複雜度= O(lgN),空間複雜度= O(lgN)。 「printBT_LBL()」的時間複雜度= O((lgN)^ 2),空間複雜度= O((lgN)^ 2)。 – zproject89

回答

2

printSpecificLevel_BTO(n),因爲它看起來在樹中的每個節點。但是,只需簡單地更改(返回時level == 0),您可以使其成爲O(min(n, 2^level))

getHeightO(n),因爲它查看樹中的每個節點。 printBT_LBL調用getHeight一次,printSpecificLevel_BTheight10次,所以其複雜度爲O(n + n*height) = O(n*height)

每一個的空間複雜度都是O(height),因爲它一直遞歸到樹的底部。你不能說O(log n),因爲這棵樹不一定是平衡的(除非它是平衡的)。

+0

嗨,Dukeling,非常感謝。但我個人認爲,因爲它是二叉樹,2^level> = n。那麼空間的複雜性呢?這似乎並不明顯。請問另一個問題:「是否有更好的方式逐級打印普通的二叉樹?」非常感謝。 – zproject89

+0

請參閱編輯。它實際上更像'O(min(n,2^level))'。例如,考慮'level = 0',然後'2^level = 1',這很可能遠遠小於'n'。以空間複雜度爲代價,可以構造一個鏈表/數組數組,並將樹中的所有節點放入此結構中第二個函數的適當索引(對應於級別)。第一個功能你不能做得更好。 – Dukeling

+0

我真的很感謝你的幫助。謝謝Dukeling。 – zproject89

1

對於printSpecificLevel_BT()您有:

enter image description here

對於printBT_LBL()您有:

enter image description here

enter image description here

+1

驚人的答案!非常感謝!你的回答讓我想起「算法導論」........ – zproject89