码迷,mamicode.com
首页 > 其他好文 > 详细

二叉查找树中元素的删除操作

时间:2016-07-06 00:22:45      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

关于二叉查找树的建立,插入,遍历(记住二叉查找树的中序遍历是所有元素由大到小排序结果)等操作,博主“C小加”写的很详细了,我主要补充二叉树的删除操作。删除操作主要难在对左右子节点都非空的节点的删除操作,这里可以找到该节点右节点中的最小值,即右子节点中的最左子树。找到后和需要删除的节点交换data等数据,然后删除这个最小子节点。实现代码如下,只需对需要删除节点的右子节点遍历一次:

技术分享
template<class T>
void BST<T>::Deletepri(TreeNode<T> *&node, T x)
{
    if(node == NULL)
        return;
    if(x > node->data)
    {
        Deletepri(node->rson, x);
    }
    else if(x < node->data)
    {
        Deletepri(node->lson, x);
    }
    else
    {
        if(node->lson!=NULL && node->rson!=NULL)
        {
            TreeNode<T> *temp = node->rson;
            TreeNode<T> *pre_node= NULL;
            TreeNode<T> *temp_node= NULL;
            while(temp->lson != NULL)
            {
            
                pre_node = temp;
                temp = temp->lson;
            }
            node->data = temp->data;
            node->freq = temp->freq;
            temp_node = temp->rson;
            delete temp;
            pre_node->lson = temp_node;
            return;
        }
        else
        {
            TreeNode<T> *temp = node;
            if(node->lson == NULL)
                node = node->rson;
            if(node->rson == NULL)
                node = node->lson;
            delete temp;
        }
    }
    return ;
}
template<class T>
void BST<T>::Delete(T x)
{
    Deletepri(root, x);
}
View Code

代码没有进行很多测试,应该有bug,欢迎指正。

二叉查找树中元素的删除操作

标签:

原文地址:http://www.cnblogs.com/bestwangjie/p/5645306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!