Посмотрите на функцию отображения:
void display(node *x,int z) {
if (z==1)
return;
else
{
cout<<it->left->data;
cout<<it->right->data;
display(it->left,z-1);
display(it->right,z-1);
return;
}
}
};
Давай Резину Даки эту функцию:
Если мы находимся в самом нижнем ряду дерева, просто вернемся вместо его отображения.
Иначе, покажите двух детей в ряду ниже нас, а затем попросите их показать своих детей.
Это ... интересный способ написания отображения для дерева. Я настоятельно рекомендую просто распечатать узел, на котором вы находитесь, и затем позволить его дочерним элементам печатать самим. Этот запутанный способ печати детей сам по себе является причиной вашей проблемы. В конце концов, чей корневой узел является дочерним? Никто! Так, кто печатает корневой узел? Никто !!
В дополнение к этому, вам действительно действительно нужно установить указатели left
и right
в ваших узлах. На данный момент у вас есть куча диких указателей. Я бы предложил добавить конструктор в ваш класс узлов, чтобы сделать это для вас.
И, наконец: почему вы тестируете с глубиной 6? Если бы мне приходилось считать столько единиц каждый раз, когда я запускал программу для проверки, я почти уверен, что вырву свои волосы в течение часа. Начните с дерева глубины 1 (которое не должно соответствовать вашему текущему коду!). Если это сработает, перейдите на глубину 2. Максимум я бы проверил на глубине 3. В конце концов, случай глубины 6 против 3, вероятно, совсем не отличается!