Эта программа выталкивает 0-й элемент стека.Я делаю обход по бинарному дереву, используя стек.Я также пытаюсь выяснить одиночные родительские узлы бинарного дерева поиска.
Это мой метод pop:
void pop()
{
if (!isEmptyStack())
stackTop--;
else
cout << "Cannot remove from an empty stack." << endl;
cout << "pop: " << stackTop << endl;
}
Это мой алгоритм обхода inorder:
template <class elemType>
void binaryTreeType<elemType> :: nonRecursiveInTraversal()
{
stackType<nodeType<elemType>*> stack;
nodeType<elemType> *current;
current = root;
while ((current != nullptr) || (!stack.isEmptyStack())){
if (current != nullptr)
{
stack.push(current);
if( (current->rLink == nullptr && current->lLink != nullptr) || (current->rLink != nullptr && current->lLink == nullptr) ){
singleParentCount += 1;
}
current = current->lLink;
}
else
{
current = stack.top();
stack.pop();
cout << current->info << " ";
current = current->rLink;
}
cout << endl;
}
}
Я ожидал, что он напечатает pop: 1, наконец, споследний введенный мной узел, в котором есть информация 40, а затем выводит 1 для родителей-одиночек, когда я вставляю 4, 9, 12, 1, 8, а затем 40.
Тем не менее, он идет в поп: 1 40, а затем pop: 0 1601268261. Я уверен, что в этот момент он попал не в ту область.
Также мой код подходит для проверки одиноких родителей?
if( (current->rLink == nullptr && current->lLink != nullptr) || (current->rLink != nullptr && current->lLink == nullptr) )
{
singleParentCount += 1;
}
Спасибо за ваше время.