首页 > 其他 > 详细

二叉搜索树的查找与删除

时间:2015-03-30 01:30:00      阅读:135      评论:0      收藏:0      [点我收藏+]

在二叉搜索树中查找一个数,如果存在,则从树中删除。

struct Node
{
    Node* left;
    Node* right;
    int data;
};

void findAndDel(Node*& head, int k)
{
    if (!head)
        return;
    Node* node = head;
    Node* vnode = new Node;
    vnode->left = vnode->right = head;
    Node* pnode = vnode;
    // find node
    while (node)
    {
        if (node->data > k)
        {
            if (node->left == NULL)
                return;
            else
            {
                pnode = node;
                node = node ->left;
            }
        }
        else if (node->data < k)
        {
            if (node->right == NULL)
                return;
            else
            {
                pnode = node;
                node = node->left;
            }
        }
        else
            break;
    }
    // found
    if (node->left == NULL)
    {
        if (pnode->right == node)
            pnode->right = node->right;
        else
            pnode->left = node->right;
        delete node;
    }
    else if (node->right == NULL)
    {
        if (pnode->right == node)
            pnode->right = node->left;
        else
            pnode->left = node->left;
        delete node;
    }
    else
    {
        Node* leftBiggest = node->left;
        Node* leftBiggestP = node;
        while (leftBiggest->right != NULL)
        {
            leftBiggestP = leftBiggest;
            leftBiggest = leftBiggest->right;
        }
        node->data = leftBiggest->data;
        if (leftBiggestP->left == leftBiggest)
            leftBiggestP->left = leftBiggest->left;
        else
            leftBiggestP->right = leftBiggest->left;
        delete leftBiggest;
    }
    head = vnode->right;
    delete vnode;
}

 

二叉搜索树的查找与删除

原文:http://www.cnblogs.com/litao-tech/p/4376742.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!