一般树--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;
}

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

posted @ 2019-01-23 08:38  ashen~  阅读(545)  评论(0编辑  收藏  举报