#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;
}
BST二叉搜索树
猜你喜欢
转载自blog.csdn.net/qq_40123329/article/details/86671312
今日推荐
周排行