【发布时间】:2016-01-20 08:51:01
【问题描述】:
int print4Subtree(struct Node *root) {
if (root == NULL)
return 0;
int l = print4Subtree(root->left);
int r = print4Subtree(root->right);
if ((l + r + 1) == 4)
printf("%d ", root->data);
return (l + r + 1); }
此算法/代码在二叉树中找到恰好具有 4 个节点的子树的数量,它以自下而上的方式工作。 我知道这段代码的时间复杂度是 O(n) ,空间复杂度是 O(log n) ,因为它使用递归。
代码的重复关系是什么?
我尝试绘制 T(n) = 2T(n-1)+1 ,这显然是错误的!
【问题讨论】:
-
在递归关系中,
n不是整数。应该是一棵树。然后,T(n) = 1 + T(n.left) + T(n.right)。形式上,它不仅取决于节点的数量,还取决于它们的结构。 -
你的公式
T(n) = 2T(n-1)+1,这个n不是节点数。只有当树是平衡二叉树时才可以使用
标签: algorithm binary-tree time-complexity recurrence