// Node.h #include template // second argument is a policy class node { public: node(size_t number, T t=0) : nodeNum_(number), value_(t), visited_(false) {} ~node() { // Can't delete children unless you are sure they were created on heap if(Delete) for(size_t i=0; i* pNode) { children_.push_back(pNode); } bool& visited() { return visited_; } size_t size() { return children_.size(); } node* getNextUnmarkedChild() { for(size_t i=0; ivisited()) return children_[i]; return 0; } private: size_t nodeNum_; T value_; std::vector*> children_; bool visited_; }; /////////////////////////////////////////////////// // class definition above is a complete answer // for Midterm1, Question 6 // Policy is interesting, but not needed for // correct complete answer template struct IFunc { virtual void operator()(node* pNode, int level)=0; }; template void DFS(node* pNode, IFunc& f) { static int lev = 1; pNode->visited() = true; f(pNode, lev++); for(size_t i=0; isize(); ++i) { node* pChild = pNode->getNextUnmarkedChild(); if(pChild) { DFS(pChild,f); } } --lev; }