参照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; }
记录下,写代码还是要在纸上先把伪代码写出来,这样后面写才会少踩坑。没到山哥那样想想就好了。