数据结构 笔记:二叉树中的结点插入操作

是否能够在二叉树的而已结点出插入子结点?

-不能,二叉树结点的每个结点的子结点是固定的,只存在左孩子和右孩子.

是否需要指定新数据元素(新结点)的插入位置?

-需要指定为左孩子或者右孩子

enum BTNodePos
{
    ANY,
    LEFT,
    RIGHT
};

插入的方式

-插入新结点

·bool insert(TreeNode<T>* node)

·bool insert(TreeNode<T>* node,BTNodePos pos)

-插入数据元素

·bool insert(cosnt T& value,TreeNode<T>* parent)

·bool insert(const T& value,TreeNode<T>* parent,BTNodePos pos)

指定位置的结点插入

bool insert(n, np, pos);

//pos = ANY
if(np->left == NULL)
{
    np->left = n;
}
else if( np->right == NULL)
{
    np->right = n;
}
else
{
    ret = false;
}

//pos = LEFT
if(np->left == NULL)
{
    np->left = n;
}
else
{
    ret = false;
}

//pos = RIGHT
if(np->right == NULL)
{
    np->right = n;
}
else
{
    ret = false
}

插入新结点

插入数据元素

总结:

-二叉树的插入操作需要指明插入的位置

-插入操作必须正确处理指向父结点的指针

-插入数据元素时需要从堆空间中创建结点

-当数据元素插入失败时需要释放结点空间

猜你喜欢

转载自blog.csdn.net/qq_29962483/article/details/84066506