- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
302 :NAS6 ◆n3AmnVhjwc []:2015/09/12(土) 09:11:43.86 ID:QD0G+9W6 - 訂正 : これは再帰的だろ
class tree{ public: tree* parent;//rootのparentはnullptr tree* chlid[];//説明の便宜上 int childsize; int crnt;//子ノード指示変数 ... //終了検知 bool end(tree* root, bool& b){ return ((b || !childsize) && this == root && (crnt < 0 || childsize <= crnt)) } //crntの順番のノードを返す tree* crntchild(bool& b){ if(crnt < 0 || childsize <= crnt) { b = true; return parent; } return child[crnt]; } }; //ノード処理 tree* nodefunc(tree* root, tree* v) { crntzero(v);//v以下のcrntを全てゼロ初期化処理:詳細は省略 bool b = false; //最初のノード処理 while(!v->end(root, b)){ v->crnt += 1; //次のノード b = false; v = v->crntchild(b); if(!b){//v:子ノード処理} else{//v:親ノード処理} } return v; }
|