2015-07-29 2 views
0
void addElement(struct BinaryTree *root, int data) { 
    if (!root) 
     return; 
    BinaryTree *newNode = new BinaryTree; 
    newNode->data = data; 
    newNode->right = NULL; 
    newNode->left = NULL; 
    queue<BinaryTree> *myqueue = new queue<BinaryTree>; 
    myqueue->push(*root); // Why do i have to dereference the object to store it in the queue; 
    BinaryTree *temp; 
    while (!myqueue->empty()) { 
     temp = myqueue->front() 
     //Throwing an error 

     myqueue->pop(); 
     if (temp->left) { 
      myqueue->push(*temp->left); 

     } else { 
      temp->left = newNode; 
      break; 
     } 
     if (temp->right) { 
      myqueue->push(*temp->right); 
     } else { 
      temp->right = newNode; 
      break; 
     } 

    } 
} 
+1

C++ не Java, вы не должны динамически выделять все объекты. Ваш объект очереди не должен быть указателем и динамически распределен, это может привести к проблемам с указателями и утечками памяти (которые у вас есть). Вместо этого просто определите его как обычный объект без указателя 'std :: queue myqueue;' –

+0

Что касается разыменования, немного подумайте о типе, хранящемся в очереди, по сравнению с типом 'root'. Кроме того, это смешение является причиной того, что код не будет компилироваться. –

ответ

0

myqueue-> push (* root); // Почему мне нужно разыменовать объект, чтобы сохранить его в очереди;

Это потому, что ваш шаблон очереди создается с BinaryTree типа, который не является указателем, так что вы не можете поместить внутри него переменную типа BinaryTree *root. Вы должны разыменовать его, используя *root.

Если бы queue<BinaryTree*>, то вы могли бы использовать myqueue->push(root);

Смежные вопросы