dooooooduo

TODO - Leetcode-811

May 11th, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.36 KB | None | 0 0
  1. /**
  2.  * Return an array of size *returnSize.
  3.  * Note: The returned array must be malloced, assume caller calls free().
  4.  */
  5.  
  6. typedef struct Tree {
  7.     char  *domain;
  8.     int    visit;
  9.     Tree **children;
  10. } Tree;
  11.  
  12. void flattenTree (Tree **tree, int *idx, char **result) {
  13.     int i;
  14.     for (i = 0; tree[i] != NULL; i++) {
  15.         result[idx] = ()
  16.     }
  17. }
  18.  
  19. char** subdomainVisits(char** cpdomains, int cpdomainsSize, int* returnSize) {
  20.     int  count = 0;
  21.    
  22.     Tree **tree = (Tree **) malloc(sizeof(Tree *) * 300);
  23.     memset(tree, 0, 300);
  24.    
  25.     int i, j, k;
  26.     for (i = 0; i < cpdomainsSize; i++) {
  27.         // map visit & domain name
  28.         int visit;
  29.         char *domain = (char *) malloc(sizeof(char) * 100);
  30.         memset(domain, 0, 100);
  31.         sscanf(cpdomains[i], "%d %s", &visit, domain);
  32.        
  33.         // divide domain into 3 parts
  34.         char **parts = (char **) malloc(sizeof(char *) * 3);
  35.         char  *token = strtok(domain, ".");
  36.         int   total  = 0;
  37.         while(token) {
  38.             parts[total] = (char *) malloc(size(char) * 100);
  39.             strcpy(parts[total], token);
  40.             token = strtok(NULL, ".");
  41.             total++;
  42.         }
  43.        
  44.         // start from the last part
  45.         Tree **current = tree;
  46.         for (j = total - 1; j >= 0; j--) {
  47.             int found = 0;
  48.             for (k = 0; current[k] != NULL; k++) {
  49.                 // if domain matches, add counter and transverse to it's children
  50.                 // create children if doesn't exist
  51.                 if (strcmp(current[k]->domain, parts[j]) == 0) {
  52.                     found              = 1;
  53.                     current[k]->visit += visit;
  54.                     current            = current[k]->children;
  55.                     break;
  56.                 }
  57.             }
  58.             // if not found, append current domain to the tree
  59.             if (!found) {
  60.                 current[k]           = (Tree *) malloc(sizeof(Tree));
  61.                 current[k]->domain   = parts[j];
  62.                 current[k]->visit    = visit;
  63.                 current[k]->children = (Tree **) malloc(sizeof(Tree) * 300);
  64.                 current              = current[k]->children;
  65.                 memset(current[k]->children, 0, 300);
  66.             }
  67.         }
  68.     }
  69.    
  70.    
  71.     char **result = (char **) malloc(sizeof(char) * 300);
  72.    
  73. }
Advertisement
Add Comment
Please, Sign In to add comment