树结构递归遍历
项目需求,从一个树结构中获取所有节点的名称,写了个递归方法,记录下来,方便以后查询。
void getAllStringIds(mpc::nsdk::IMediaIterator *it) { IMediaNode *self = nullptr; IMediaIterator *curr = nullptr; IMediaIterator *next = nullptr; IMediaIterator *down = nullptr; curr = it; do{ self = curr->self(); next = curr->next(); down = curr->down(); mpc::nsdk::IMediaRes *resPtr = nullptr; mpc::nsdk::SResId resId; if(self->isRes()) { resPtr = dynamic_cast< mpc::nsdk::IMediaRes* > ( self ); resId = resPtr->msid(); string stringId; resIdStr(resId,stringId); ost.write(stringId.c_str(),stringId.size()); string interval ="\r\n"; ost.write(interval.c_str(), interval.size()); }
// 如果有子节点,继续找子节点,知道找到最后一个子节点。 if(down) { getAllStringIds(down); }
//递归从底层向,将每个子节点同一层的节点作为current节点继续循环下去。
//这种递归借助于堆栈嵌套,层数太多,可能会引起堆栈溢出。 if(next) { curr = next; } }while(next); }