以树格式打印常规树

时间:2013-10-06 12:08:13

标签: c++ printing tree

我创建了一个通用树,我需要一个函数在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);
}

1 个答案:

答案 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
    }
}

这是在父母下面打印孩子的正确方法,但是必须根据父母可以拥有的子节点的最大数量来计算间距部分。