Печать общего дерева в формате дерева

0

Я создал общее дерево, и мне нужна функция для печати в виде дерева в c++. Я могу напечатать двоичное дерево, в котором количество пробелов для заданного уровня фиксировано, но общее дерево может иметь любое количество узлов на определенном уровне, так как я могу вычислить требуемые пробелы. Это код, который я создал для двоичного дерева.

void prnttree(node* p,int a)
//a contains the value of maximum Height
{
    int ht=0;
        int i,c=0;
    node* n=NULL;
    end=0;
    start=0;
    q[end]=p;
    do
    {
        if(p!=NULL)
        {
                        //q is an array of pointers to node   
            q[++end]=p->left;
            q[++end]=p->right;
        }
        else
        {
            q[++end]=n;
            q[++end]=n;
        }
        if(pow(2,ht)-1==c)
        {
            cout<<"\n\n";
            for(i=1;i<=(pow(2,a-ht+1)-2);i++)
                cout<<" ";
        }
        if(p!=NULL)
            cout<<p->data;
        else
                cout<<" ";
        for(i=1;i<=(pow(2,a-ht+2)-1);i++)
            cout<<" ";
        p=q[++start];
        c++;
        if(c+1==pow(2,ht+1))
            ht++;
    }while(ht<=a);
}
Теги:
printing
tree

1 ответ

0

Вам нужно сначала найти максимальную высоту данного дерева и использовать вспомогательную функцию ниже для печати каждого уровня данного дерева.

void prnttreeHelper(node* p)
{
    int maxHeight = findHeight(p);
    for(int i = 0;i<height;i++)
    {
        //formula to print initial number of spaces for the tree like structure
        //which will be dependant on the max allowed child nodes and the height of tree
        prnttree(p,i,0);
        cout<<'\n';
    }
}

И вы, собственно,

void prnttree(node* root, int currLevel, int lvlPrint)
{
    if(p==null)
    {
        cout<<'\t';
        return;
    }
    if(currLevel == lvlPrint)
        cout<<p->data<<'\t';
    else
    {
        prnttree(root->child[0], currLevel, lvlPrint+1);
        prnttree(root->child[1], currLevel, lvlPrint+1);
        //..for n number of possible child(considering a parent can have a max of n children
    }
}

Это правильный способ печати ребенка ниже родителя, но часть интервала должна быть разработана на основе максимального количества дочерних узлов, которые может иметь родитель.

  • 0
    Большое спасибо, но это не то, как я реализовал дерево, у одного узла есть следующие ссылки: папа, сын (просто 1) и брат, я реализовал таким образом, потому что тогда узел может иметь любое количество дочерних элементов и не ограничиваться по максимальному количеству. Можешь придумать что-нибудь для этого. У узла есть только 1 сын и любое количество братьев и сестер
  • 0
    @VinithVenkatesan Как узнать реализацию вашего дерева, не видя его. Пожалуйста, напишите структуру вашего дерева в вопросе. Также вы планируете использовать векторы для any number of siblings как без этого вы не можете сделать это. Я настоятельно рекомендую вам снова рассмотреть вашу структуру и заменить ее на ту, которую я предположил
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню