Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<class T>
- class LRoRIterator {
- std::stack<Task<T>> container;
- void windStack() {
- while (!container.empty() && container.top().toPrint == false) {
- std::vector<Task<T>> level;
- while (!container.empty()) {
- level.push_back(container.top());
- container.pop();
- }//Във вектора се намират елементите от съответното ниво
- for (Task<T> t : level) {
- if (t.node->right) container.push(Task<T>(t.node->right, false));
- if (t.node->left) container.push(Task<T>(t.node->left, false));
- }//В стека сме добавили наследниците на елементите от вектора, тоест заредили сме за обработка елементите от следв. ниво
- //Във вектора са ти елементите от нивото, които следва да се обработят
- int countDifferent = findDifferent(level);//Функцията, която ти приема вектора с елементите от нивото и връща това, което е по условие - мисля че беше да намери броя на уникалните елементи. Мисля, че можеш да се справиш със функцията.
- TreeNode<T>* result = new TreeNode(countDifferent,nullptr,nullptr);
- container.push(new Task<T>(result,true);//Нарочно добавям задача, за да запазя консистентността на стека.
- }
- }
- public:
- LRoRIterator(TreeNode<T>* start) {
- if (start) {
- Task<T> firstState(start, false);
- container.push(firstState);
- windStack();
- }
- }
- void operator ++(int) {
- if (!container.empty()) {
- container.pop();
- windStack();
- }
- }
- T operator * () {
- return container.top().node->data;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement