一,模版树需求
1,树的结点数据进行泛型处理;
2,树的增删改查;
3,增加父结点,目的是在树的遍历算法中不依赖栈结构;
4,解耦树的信息与树结点信息,定义两个class。
二,模版树class结构设计
1,树的结点数据
template<class T>
struct treenode {
T val;
treenode<T> *parent;
deque <treenode<T> *> child;
}
deque <treenode<T> *> child; 思考了很多stl容器类,vector,list,unordered_map,最终使用deque较为合适,对比如下:
1)vector没有push_front接口;
2)list不能随机访问,也就是不能使用operator[ ];
3)unordered_map,在之后重新排序显得很难处理。
对比使用C语言构建树时,是转换二叉指针表示,左指针指向第一个孩子结点,右指针指向兄弟结点,该树的特点 根节点无右子树。表示如下:
struct treenode {
struct treenode *parent;
struct treenode *child;
struct treenode *sibling;
}