Неправильное отображение обхода двоичного дерева

Неправильное отображение моего двоичного дерева в порядке обхода. Я не могу понять, что я делаю не так. Вывод отображается в 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

0

Решение

Я думаю тебе непонятно что с целью средства. 1 .. 15 — ожидаемый результат для упорядоченного обхода бинарного дерева поиска, содержащего значения 1 .. 15. Последовательность, которую вы дали, звучит как Предварительный заказ на сбалансированный бинарное дерево поиска.

Другими словами, ваш код обхода верен для обхода по порядку.

Тем не менее, ваше дерево поколение код не создает сбалансированное дерево. Обход по порядку не будет разоблачать это, но прохождение до или после заказа будет. Поскольку вы вставляете все значения в возрастающем последовательном порядке, вы получите дерево, состоящее исключительно из правильных потомков. Добавь немного cout заявления к вашему обходу, чтобы увидеть, что я имею в виду.

4

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

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

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