我创建了一个通用树,我需要一个函数在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);
}
答案 0 :(得分: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
}
}
这是在父母下面打印孩子的正确方法,但是必须根据父母可以拥有的子节点的最大数量来计算间距部分。