//------------------------------------------------------------------------------ node * TreeToList( node * root ){ if( root == nullptr ){ return nullptr; } auto llist = TreeToList( root->left ); auto rlist = TreeToList( root->right ); root->left = root; root->right = root; return Append( Append( llist, root ), rlist ); }
//------------------------------------------------------------------------------ int main(){ auto list = CreateList( std::vector<int>( {1,2,3,4,5} ) ); std::cout << PrintList( list ) << std::endl; std::cout << PrintBackList( list ) << std::endl; auto listA = CreateList( std::vector<int>( {1,2,3,} ) ); auto listB = CreateList( std::vector<int>( {4,5} ) ); auto ab = Append( listA, listB ); std::cout << PrintList( ab ) << std::endl; auto tree = CreateTree( std::vector<int>( {4,2,1,3,5} ) ); std::cout << PrintTree( tree ) << std::endl; auto treelist = TreeToList( tree ); std::cout << PrintList( treelist ) << std::endl; TestRandomTree(); return EXIT_SUCCESS; }
// interacting with R // [[Rcpp::export]] Rcpp::List make_sgftree(std::string sgf, bool bynode = true) { Tree<std::string> t; if (bynode) { t = MakeSgfNodeTree(sgf); } else { t = MakeSgfBranchTree(sgf); } Rcpp::List out = TreeToList(t); return out; }
//------------------------------------------------------------------------------ void TestRandomTree(){ std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(1, 100); std::vector<int> values; for( auto i = 0 ; i < 100 ; ++i ){ values.emplace_back( dis(gen) ); } auto tree = CreateTree( values ); std::cout << PrintTree( tree ) << std::endl; auto treelist = TreeToList( tree ); std::cout << PrintList( treelist ) << std::endl; }