Я изучаю структуры данных и пытаюсь построить бинарное дерево, вставляя узлы в порядке уровней, но при этом у меня мало проблем. Я хочу вставить узлы в двоичное дерево, просто зная количество узлов, которые есть в дереве в данный момент, путем прямого перехода к родительскому узлу без возврата. Это то, что я написал до сих пор
Дерево. cpp
#include <iostream>
#include <cstdlib>
#include <cmath>
struct treeStruct {
int data;
struct treeStruct* parent;
struct treeStruct* left;
struct treeStruct* right;
treeStruct() {
data = 0;
parent = NULL;
left = NULL;
right = NULL;
}
};
void printInOrder(treeStruct* root) {
if(root != NULL) {
std::cout << root->data << "\t";
printInOrder(root->left);
printInOrder(root->right);
}
}
void printPreOrder(treeStruct* root) {
if(root != NULL) {
printPreOrder(root->left);
std::cout << root->data << "\t";
printPreOrder(root->right);
}
}
void printPostOrder(treeStruct* root) {
if(root != NULL) {
printPostOrder(root->left);
printPostOrder(root->right);
std::cout << root->data << "\t";
}
}
treeStruct* insertNode(treeStruct* parent, int data, int dir) {
treeStruct* node = new treeStruct();
if(parent == NULL) {
node->data = data;
}
else {
if(dir == 1) {
node->data = data;
node->parent = parent;
parent->left = node;
}
else if(dir == 2) {
node->data = data;
node->parent = parent;
parent->right = node;
}
}
return node;
}
treeStruct* constructInLevelTree(int* data, int len) { //having trouble in here
int level = -1;
int noOfNodes = 0;
treeStruct* root = NULL;
for(int i = 0; i < len; ++i) {
if(level == -1) {
root = insertNode(NULL, data[i], 0);
++level;
++noOfNodes;
}
else if(pow(2, level) >= noOfNodes) {
treeStruct* node = root;
treeStruct* parent = root->parent;
int scanCount = 0;
while(scanCount < noOfNodes) {
if((scanCount % 2) == 0) {
if(node != NULL) {
parent = node;
node = node->left;
}
}
else {
if(node != NULL) {
parent = node;
node = node->right;
}
}
++scanCount;
}
if((scanCount % 2) == 0)
insertNode(parent, data[i], 1);
else
insertNode(parent, data[i], 2);
++noOfNodes;
}
else {
++level;
}
}
return root;
}
int main(int argc, char* argv[]) {
int data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
treeStruct* root = constructInLevelTree(data, sizeof(data) / sizeof(int));
printInOrder(root);
printPreOrder(root);
printPostOrder(root);
return EXIT_SUCCESS;
}