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

📅  最后修改于: 2021-06-29 17:39:14             🧑  作者: Mango

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

这个问题的测验