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();
    }
}
4

2 回答 2

2

printSpecificLevel_BTO(n)因为它查看树中的每个节点。但是,只需简单地更改(返回时level == 0),您就可以做到O(min(n, 2^level))

getHeightO(n)因为它查看树中的每个节点。printBT_LBL调用getHeight一次又一次printSpecificLevel_BT height,所以它的复杂度是O(n + n*height) = O(n*height).

每个的空间复杂度是O(height)因为它一直递归到树的底部。你不能说O(log n)因为树不一定是平衡的(除非它是平衡的)。

于 2014-04-06T16:21:34.767 回答
1

因为printSpecificLevel_BT()你有:

在此处输入图像描述

因为printBT_LBL()你有:

在此处输入图像描述

在此处输入图像描述

于 2014-04-06T18:17:41.243 回答