给定数组按要求生成树

假设给你一个非负整数且不重复的序列 如{1,2,3,4}生成的树    

根节点自己设置 值为-1  那么它有4个子结点 分别为1 2 3 4
我们将4个结点称为父序列
在每个结点中都要生成 父序列中不包含父结点 的子结点 如果父序列除去父结点外没有元素 就不生成
例如 结点1生成的子结点为2 3 4
每个子结点都要继续产生子结点 直到无法生产。


#include

#include

using namespace std;


std::string foo( const int buf[], size_t bufsize, const std::string& prefix="" )

{

    if( bufsize == 0 )

        return {};


    std::string result = std::to_string(buf[0]) + '\n';

    for( size_t i=1; i!=bufsize; ++i )

        result += prefix + (i+1!=bufsize?"├─":"└─") + foo( buf+i, bufsize-i, prefix+"│ " );

    return result;

}


int main( void )

{

    int a[] = { -1, 1, 2, 3, 4 };

    cout << foo(a,std::size(a)) << endl;


    int b[] = { -1, 1, 0 };

    cout << foo(b,std::size(b)) << endl;

}



请使用浏览器的分享功能分享到微信等