zoukankan      html  css  js  c++  java
  • 智能指针二叉树(填坑中)

    struct Node;
    using NodePtr = std::unique_ptr<Node>;
    struct Node
    {
        int value;
        Node* parent  = nullptr;
        NodePtr left  = nullptr;
        NodePtr right = nullptr;
        Node(int value_): value(value_){}
    };
    
    void insert(NodePtr& root, NodePtr&& new_node)
    {
        auto const value = new_node->value;
        auto new_node_ref = &root;
        while ((*new_node_ref) != nullptr){
            if ((*new_node_ref)->value < value){
                new_node_ref = &((*new_node_ref)->right);
            }else{
                new_node_ref = &((*new_node_ref)->left);
            }
        }
        (*new_node_ref) = std::move(new_node);
    }
    
    NodePtr create(const std::vector<int>& data)
    {
        if (data.empty ()){
            return NodePtr();
        }
        auto root = std::make_unique<Node>(data.front ());
        std::for_each(data.begin () + 1, data.cend (),
            [&](int value){ insert (root, std::make_unique<Node>(value));});
        return std::move(root);
    }
    
    void traverse(const NodePtr& root)
    {
        if (root != nullptr){
            traverse (root->left);
            std::printf("%d ", root->value);
            traverse (root->right);
        }
    }
    
    NodePtr overturn(NodePtr& root)
    {
        if (root != nullptr){
            overturn (root->left);
            overturn (root->right);
            std::swap(root->left, root->right);
        }
        return std::move(root);
    }
  • 相关阅读:
    codeforces 349B Color the Fence 贪心,思维
    luogu_2022 有趣的数
    luogu_2320 [HNOI2006]鬼谷子的钱袋
    luogu_1879 [USACO06NOV]玉米田Corn Fields
    SAC E#1
    luogu_1984 [SDOI2008]烧水问题
    luogu_2085 最小函数值
    luogu_1631 序列合并
    luogu_1196 银河英雄传说
    luogu_1037 产生数
  • 原文地址:https://www.cnblogs.com/wuOverflow/p/5233457.html
Copyright © 2011-2022 走看看