C ++ двоичный древовидный порядок обхода, предварительный заказ и почтовый заказ

В настоящее время я работаю над проектом C ++, и часть его состоит в том, чтобы пройти через двоичное дерево, используя inorder, preorder и postorder.

class TNode
{
public:
int val;
TNode() {}
TNode(int v) { val = v; }
TNode * left;
TNode * right;
TNode * parent;
};

class BTree
{
void print_pre_order(TNode *r);// print the node as you traverse according to the order.
void print_in_order();
void print_post_order();
}BTree::BTree()
{
root = new TNode(1);
root->parent = 0;
root->left = new TNode(2);
root->right = new TNode(3);
root->left->left = new TNode(4);
root->left->right = new TNode (5);
root->right->left = new TNode(6);
}
void BTree::print_pre_order(TNode *r)
{
if (r == 0)
{
return;
}
cout << r->val;
print_pre_order(r->left);
print_pre_order(r->right);
}

int main()
{
BTree y;
y.print_pre_order(y.root);
return 0;
}

В моем конструкторе по умолчанию я инициализировал значения для некоторых узлов, но когда я запускаю код, я получаю вывод «124» и выдает ошибку. Я не знаю, где я сделал не так, может кто-нибудь помочь?

0

Решение

Я не вижу признаков того, что программа когда-либо устанавливает какие-либо указатели на ноль, поэтому if (r == 0) вряд ли когда-нибудь вызовет выход.

Попробуйте это:

class TNode
{
public:
int val;
TNode(): val(0), left(nullptr), right(nullptr), parent(nullptr) {}
TNode(int v): val(v), left(nullptr), right(nullptr), parent(nullptr) {}
TNode * left;
TNode * right;
TNode * parent;
};

: говорит компилятору, что список инициализаторов членов приближается. После этого код инициализирует все члены указателя так, чтобы они указывали на ноль.

Изменить

if (r == 0)

в

if (r == nullptr)

лучше передать намерение, и вы должны быть хорошими, чтобы идти.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]