項目需求,從一個樹結構中獲取所有節點的名稱,寫了個遞歸方法,記錄下來,方便以后查詢。
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); }