Я создал общее дерево, и мне нужна функция для печати в виде дерева в 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);
}
Вам нужно сначала найти максимальную высоту данного дерева и использовать вспомогательную функцию ниже для печати каждого уровня данного дерева.
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
}
}
Это правильный способ печати ребенка ниже родителя, но часть интервала должна быть разработана на основе максимального количества дочерних узлов, которые может иметь родитель.
any number of siblings
как без этого вы не можете сделать это. Я настоятельно рекомендую вам снова рассмотреть вашу структуру и заменить ее на ту, которую я предположил