考虑使用指针表示的有根的二叉树。最好上界,以确定具有正好具有4个节点ø子树的数量(N A LOGN b)中所需的时间。那么a + 10b的值是________
(A) 1
(B) 11
(C) 12
(D) 21答案: (A)
说明:我们可以在O(n)时间内找到具有4个节点的子树。遵循可能是一种简单的方法。
1)以自下而上的方式遍历树,并找到以当前节点为根的子树的大小
2)如果size变为4,则打印当前节点。
以下是C语言的实现
#include
#include
struct Node
{
int data;
struct Node *left, *right;
};
// A utility function to create a new Binary Tree Node
struct Node *newNode(int item)
{
struct Node *temp = (struct Node *)malloc(sizeof(struct Node));
temp->data = item;
temp->left = temp->right = NULL;
return temp;
}
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);
}
// Driver Program to test above functions
int main()
{
struct Node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
root->right->left = newNode(6);
root->right->right = newNode(7);
root->right->left->right = newNode(8);
print4Subtree(root);
return 0;
}
这个问题的测验