Привет, я ищу помощь, чтобы написать как можно проще для меня, чтобы понять функцию для печати BST красивым способом.Например,
50
/ \
30 70
Вот мой код, который добавляет элементы в дерево:
#include <iostream>
using namespace std;
struct node
{
int key;
struct node *left;
struct node *right;
};
struct node *root;
struct node *make_leaf(int new_data);
struct node *add_node(struct node* root, int key);
int main()
{
node *root = NULL;
int new_element, how;
cout<<"How many elements?"<<endl;
cin>>how;
for(int i=0; i<how; ++i){
cout<<"Enter element value"<<endl;
cin>>new_element;
root = add_node(root, new_element);
}
return 0;
}
struct node* make_leaf(int new_data){
node *nd=new node;
nd->key=new_data;
nd->left=NULL;
nd->right=NULL;
return nd;
}
struct node *add_node(struct node* root, int key){
if (root==NULL)
{
return make_leaf(key);
}
else
{
if (root->key > key)
{
root->left = add_node(root->left, key);
}
else
{
root->right = add_node(root->right, key);
}
}
return root;
}
Я ищу помощь, но я начинаю свое приключение с программированием, поэтому, пожалуйста, не сердитесьна меня :) Спасибо!
РЕДАКТИРОВАТЬ
Я пробовал функцию ниже, но она не записывает корень узла вверху, как этодолжно быть: /
void postorder(struct node * root, int indent)
{
if(root != NULL) {
if(root->right) {
postorder(root->right, indent+4);
}
if (indent) {
cout << setw(indent) << ' ';
}
if (root->right) cout<<" /\n" << setw(indent) << ' ';
if(root->left) {
cout << setw(indent) << ' ' <<" \\\n";
postorder(root->left, indent+4);
}
}
}