32 个节点深的完美二叉树中有多少个节点?
How many nodes are in a perfect binary tree that is 32 nodes deep?
根据我在 Google 上找到的公式,它是 2^(32-1) = 2147483648,但这似乎有点高。这是正确的吗?
实际上,它不是 2^(32-1)
。是 (2^32)-1
,或 4294967295
。
所以...比您计算的还要大。
我们可以使用 induction 证明实际结果((2^r) - 1,其中 r 是行数)!树中的每一行 r 包含 2^(r-1) 个节点 这很清楚,因为每一行包含的元素数量是最后一行的两倍,所以第一行包含 2^(1 - 1) = 1 个节点,第二行行包含此数字 2^(2 - 1) 的两倍,2 个节点。
假设如果我们有 r 行,节点总数的公式是 2^r - 1。检查这个对于简单的情况,1 行有 2^1 - 1 = 1 个节点...
现在证明从第 r 个案例到第 r + 1 行行得通所以在第 r 个案例中,我们有 (2^r) - 1 个节点来获得 (r + 1) 的总行数第 th 种情况我们需要添加第 (r + 1) 个节点。如第一段所述,第 (r + 1) 行有 2^((r + 1) -1) 个节点。将其添加到我们当前的节点总数中得到:
(2^r) - 1 + 2^(r + 1 - 1) = 2^r - 1 + 2^r = 2 * 2^r - 1 = 2^(r + 1) - 1
因为这是第 (r+1) 行的正确公式,我们已经证明了结果。
根据我在 Google 上找到的公式,它是 2^(32-1) = 2147483648,但这似乎有点高。这是正确的吗?
实际上,它不是 2^(32-1)
。是 (2^32)-1
,或 4294967295
。
所以...比您计算的还要大。
我们可以使用 induction 证明实际结果((2^r) - 1,其中 r 是行数)!树中的每一行 r 包含 2^(r-1) 个节点 这很清楚,因为每一行包含的元素数量是最后一行的两倍,所以第一行包含 2^(1 - 1) = 1 个节点,第二行行包含此数字 2^(2 - 1) 的两倍,2 个节点。
假设如果我们有 r 行,节点总数的公式是 2^r - 1。检查这个对于简单的情况,1 行有 2^1 - 1 = 1 个节点...
现在证明从第 r 个案例到第 r + 1 行行得通所以在第 r 个案例中,我们有 (2^r) - 1 个节点来获得 (r + 1) 的总行数第 th 种情况我们需要添加第 (r + 1) 个节点。如第一段所述,第 (r + 1) 行有 2^((r + 1) -1) 个节点。将其添加到我们当前的节点总数中得到:
(2^r) - 1 + 2^(r + 1 - 1) = 2^r - 1 + 2^r = 2 * 2^r - 1 = 2^(r + 1) - 1
因为这是第 (r+1) 行的正确公式,我们已经证明了结果。