zoukankan      html  css  js  c++  java
  • 一般树--common tree

    参照libyang中的lyd_tree的组织结构,写了一套通用树接口。

    github 的地址:https://github.com/HellsingAshen/mytc/tree/master/tc_ctree

    最复杂的应该是bfs的实现,折腾了一下,原来的思路是

    for (node = root->node; node != last_node; node = bfs_get_next(node)){
         /* travel */  
    }

    这样的一个循环,实现bfs,但是bfs_get_next 实现较复杂:

    node at level n

    a) travel node

    b) travel node->sibling 

    c) travel cousion

    d) travel first node whose level is level (node) + 1 

    后来换了个实现方式,按层遍历:

    void _bfs_travel_level(int level, struct ct_root* root)
    {
        struct ct_node* first           = NULL;
        for (first = ct_get_level_first_node(root, level); first; first = ct_get_level_next(first))
        {
            travel(first);
        }
        return;
    }
    
    struct ct_node* ct_node_bfs(struct ct_root* root)
    {
        int             height          = 0;
        int             i               = 0;
    
        height = ct_get_deepth(root);
    
        for (; i < height; i++)
        {
            _bfs_travel_level(i, root);
        }
    
        return NULL;
    }

    记录下,写代码还是要在纸上先把伪代码写出来,这样后面写才会少踩坑。没到山哥那样想想就好了。

  • 相关阅读:
    P6585 中子衰变
    [APIO2020]有趣的旅途
    CF1354F Summoning Minions
    CF1361C Johnny and Megan's Necklace
    CF1368E Ski Accidents
    CF1458C Latin Square
    CF1368F Lamps on a Circle
    用户和组的管理
    Windows命令
    1
  • 原文地址:https://www.cnblogs.com/ashen/p/common_tree.html
Copyright © 2011-2022 走看看