C++11迭代器模式展示

2021-07-13  本文已影响0人  FredricZhu

题目,


image.png

这个代码跟迭代器没什么关系,就是先序遍历树,然后把遍历结果放到std::vector里面。
不过有了这个std::vector,就可以对std::vector进行迭代了。

实现思路也很简单,直接递归

程序代码如下,

#include <iostream>
#include <vector>
using namespace std;

template <typename T>
struct Node
{
    T value;
    Node *left{nullptr}, *right{nullptr}, *parent{nullptr};

    Node(T value) : value(value) {}

    Node(T value, Node<T> *left, Node<T> *right) : value(value), left(left), right(right) {
      left->parent = right->parent = this;
    }

    // traverse the node and its children preorder
    // and put all the results into `result`
    void preorder_traversal(vector<Node<T>*>& result)
    {
        preorder_traversal_inner(result, this);
    }
    
    void preorder_traversal_inner(vector<Node<T>*>& result, Node<T>* node) {
        if(!node) {
            return;
        }
        result.push_back(node);
        if(node->left) {
            preorder_traversal_inner(result, node->left);
        }
        
        if(node->right) {
            preorder_traversal_inner(result, node->right);
        }
    }
};
上一篇 下一篇

猜你喜欢

热点阅读