考虑使用指针表示的有根二叉树。确定具有恰好 4 个节点的子树的数量所需时间的最佳上限 O(n a Logn b )。那么 a + 10b 的值是________
(一) 1
(乙) 11
(三) 12
(四) 21答案:(一)
解释:我们可以在 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;
}
这个问题的测验