插入的方式
-插入新结点
·bool insert(TreeNode<T>* node)
-插入数据元素
·bool insert(const T& value,TreeNode<T>* parent)
如何指定新结点在树里面的位置
插入新结点之前,必须先找到前驱结点
bool insert(TreeNode<T>* node)
{
bool ret = true;
if(node != NULL)
{
if(this->m_root == NULL)
{
node->parent = NULL;
this->m_root = node;
}
else
{
GTreeNode<T>* np = find(node->parent);
if( np != NULL)
{
GTreeNode<T>* n = dynamic_cast<GTreeNode<T>*>(node);
if( np->child.find(n) < 0)
{
np->child.insert(n);
}
}
else
{
//抛出异常
}
}
}
else
{
//抛出异常
}
return ret;
}
插入数据元素
bool insert(const T& value,TreeNode<T>* parent)
{
bool ret = true;
GTreeNode<T>* node = new GTreeNode<T>();
if(node != NULL)
{
node->value = value;
node->parent = parent;
insert(node);
}
else
{
//抛出异常
}
return ret;
}
总结:
插入操作时构建树的唯一操作
-执行操作时必须指明结点间的父子关系
-插入操作必须正确处理指向父节点的指针
-插入数据元素时需要从堆空间中创建结点