BST二叉搜索树

深入学习理解BST

#include <iostream>
using namespace std;

typedef struct BiTNode{
    int data;
    struct BiTNode *left,*right;
}BiTNode,*BiTree;

//二叉树的插入操作
void Insert(BiTNode *&root,int x)
{
    if(root==NULL)
    {
        root=new BiTNode;
        root->data=x;
        root->left=NULL;
        root->right=NULL;
        cout<<"插入节点"<<x<<"成功"<<endl;
    }

    else if(x<root->data)
        Insert(root->left,x);
    else if(x>root->data)
        Insert(root->right,x);
    else
        return;
}

//二叉排序树的建立
BiTree CreateBST(int data[],int n)
{
    BiTNode *root=NULL;   //这个时候还没有建立节点
    for(int i=0;i<n;i++)
        Insert(root,data[i]);
    cout<<"创建二叉树成功!"<<endl;
    return root;
}

//二叉排序树的遍历
void Tranverse_BST(BiTNode *root)
{
    if(root!=NULL)
    {
        Tranverse_BST(root->left);
        cout<<root->data<<" ";
        Tranverse_BST(root->right);
    }
}

//寻找以root为根节点的树中最小权值节点
BiTNode *findMin(BiTree root)
{
    while(root->left)
        root=root->left;
    return root;
}

//寻找以root为根节点的树中最大权值节点
BiTNode *findMax(BiTree root)
{
    while(root->right)
        root=root->right;
    return root;
}

//删除节点的递归形式,只考虑2种情况:(1)无左右孩子(2)只有1个孩子
void deleteNode(BiTree &root,int x)
{
    if(root==NULL)
        return ;
    if(root->data==x)
    {
        if(root->left==NULL&&root->right==NULL)
        {
            delete root;
            root=NULL;
        }
        else if(root->left!=NULL)  //左子树不为空,找前驱
        {
            BiTNode *pre=findMax(root->left);
            root->data=pre->data;
            deleteNode(root->left,pre->data);
        }
        else if(root->right!=NULL)    //右子树不为空
        {
            BiTNode *next=findMin(root->right);
            root->data=next->data;
            deleteNode(root->right,next->data);
        }

    }
    else if(x<root->data)
    {
        deleteNode(root->left,x);
    }
    else
        deleteNode(root->right,x);
}

int main()
{
    int data[8]={6,3,8,1,5,4,7,9};
    BiTree root=CreateBST(data,8);
    Tranverse_BST(root);
    deleteNode(root,7);
    cout<<endl;
    Tranverse_BST(root);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40123329/article/details/86671312