📜  门| GATE-CS-2014-(Set-1) |问题 21

📅  最后修改于: 2021-09-26 04:34:30             🧑  作者: Mango

考虑使用指针表示的有根二叉树。确定具有恰好 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;
}

这个问题的测验