1,需要考虑的问题:
1,是否能够在二叉树任意结点处插入子结点?
1,不能,二叉树每个结点的成员是相对固定的,只有两个指向左右后继结点的指针成员;
2,是否需要指定新数据元素(新结点)的插入位置?
1,需要;
2,插入新结点(或数据元素)作为叶结点孩子,具体插入左边还是右边呢?
2,二叉树结点的位置枚举类型:
1,enum BTNodePos
{
ANY, // 不介意,左右孩子都可以
LEFT, // 插入新结点只能作为左孩子;
RIGHT // 插入新结点只能作为右孩子;
};
3,插入方式:
1,插入新结点:
1,bool insert(TreeNode<T>* node);
1,只要新结点能插入就可以,不管左边还是右边的位置;
2,左右没有位置,返回 false;
2,bool insert(TreeNode<T>* node, BTNodePos pos);
1,按照 pos 要求插入位置,要求位置没有位置,则返回 false;
2,通用树结构插入操作只会返回 true;
2,插入数据元素:
1,bool insert(const T& value, TreeNode<T>* parent);
1,只要有位置就插入;
2,bool insert(const T& value, TreeNode<T>* parent, BTNodePos pos);
1,按 pos 要求插入;
4,新结点的插入:
1,查找;
2,插入;
5,指定位置的结点插入:
6,插入新结点: