Неправильное отображение моего двоичного дерева в порядке обхода. Я не могу понять, что я делаю не так. Вывод отображается в 1-15, когда высота равна 4 (включая уровень 0 как 1) вместо того, чтобы отображаться как: 8 4 9 2 10 5 11 1 12 6 13 3 14 7 15.
главный:
#include <iostream>
#include "math.h"#include "bintree.h"using namespace std;
int main()
{
binary_tree bin;
int tmp, num, height;
cout << "Please enter a height that you wish to see: " ;
cin >> height;
cout << endl << endl;
bin.insert(num, height);
cout << "The In-Order Traversal is: " ;
bin.displayinorder();
cout << endl << endl;system("Pause");
return 0;
}
void binary_tree::insert(int num, int height)
{
num = pow(2, height);
for(int i = 1; i < num; i++)
{
node* t = new node;
node* parent;
t-> data = i;
t-> left = NULL;
t-> right = NULL;
parent = NULL;
if(isEmpty()) root = t;
else
{
node* curr;
curr = root;
while(curr)
{
parent = curr;
if(t->data > curr->data) curr = curr->right;
else curr = curr->left;
}
if(t->data < parent->data)
parent->left = t;
else
parent->right = t;
}
}
}void binary_tree::displayinorder()
{
inorder(root);
}
void binary_tree::inorder(node* p)
{
if(p)
{
inorder(p -> left);
cout<< " " << p->data <<" ";
inorder(p -> right);
}
}
void binary_tree::displaypreorder()
{
preorder(root);
}
void binary_tree::preorder(node* p)
{
if(p != NULL)
{
cout<<" "<< p -> data <<" ";
preorder(p -> left);
preorder(p -> right);
}
else return;
}
заголовок:
#ifndef BINTREE_H
#define BINTREE_H
#include <cstdlib> // Provides NULL and size_t
class binary_tree
{
private:
struct node
{
node* left;
node* right;
int data;
};
node* root;
public:
binary_tree()
{
root = NULL;
}
bool isEmpty() const
{
return root==NULL;
}
void displayinorder();
void inorder(node*);
void displaypreorder();
void preorder(node*);
void insert(int, int);
};
#endif
Я думаю тебе непонятно что с целью средства. 1 .. 15 — ожидаемый результат для упорядоченного обхода бинарного дерева поиска, содержащего значения 1 .. 15. Последовательность, которую вы дали, звучит как Предварительный заказ на сбалансированный бинарное дерево поиска.
Другими словами, ваш код обхода верен для обхода по порядку.
Тем не менее, ваше дерево поколение код не создает сбалансированное дерево. Обход по порядку не будет разоблачать это, но прохождение до или после заказа будет. Поскольку вы вставляете все значения в возрастающем последовательном порядке, вы получите дерево, состоящее исключительно из правильных потомков. Добавь немного cout
заявления к вашему обходу, чтобы увидеть, что я имею в виду.
Других решений пока нет …