码迷,mamicode.com
首页 > 编程语言 > 详细

二叉排序树的实现

时间:2020-04-19 19:35:27      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:==   strong   nod   clu   int   出现   遇到   mic   调用   

1,伪代码部分

BSTree SearchBST(BSTree T,int key) 
{
   if (!T||key==T->date)  return T;
   else if(key<T->data.key)  retrun SearchBST(T->lchild,key) //递归
   else return SearchBST(T->rchild,key)
}
void InsertBST(BSTree &T,int e)
{
    新建一个二叉树 S;
    if (!T)  S = new BSTNode  S->data = e  令其左右孩子为空;
    else if (e>T->data) InsertBST(T->rchild,e) //递归
    else InsertBST(T->lchild,e);
}
   
void CreatBST(BSTree &T)
{
   T=NULL;   //令根节点为空
   int a[100];
   cin << a[0];
   for (i=0; a[i]!=-1; i++) //当遇到-1时停止;
       InsertBST(T,e);  //调用Insert函数
       cin<< a[i];
}
void DeleteBST(BSTree &T,int key) {
    BSTree p;
    p = SearchBST(T,key) //调用search函数
    if (p->lchild==NULL&&p->rchild==NULL) T=p=NULL;
    else BSTree T1; T1=p; T=p=NULL; 
         While(T1!=NULL)  InsertBST(T,T1->lchild->data) InsertBST(T,T1->child->data)
}

注意事项:

1,在实现删除key的操作时,需要考虑删除节点的子节点是否为空,空则直接删除,不空则要将子节点的值再次插入到直接删除后的原二叉树中,如果直接删除,会导致删了一个,子节点跟着也被删了。

2,删除时,要先查找key值再二叉树中是否出现。

2,代码展示

#include<iostream>
using namespace std;
typedef struct BSTNode
{
    int data;
    struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
void InsertBST(BSTree &T,int e)
{
	BSTree S;
	if (!T) {
		S = new BSTNode;
		S->data = e;
		S->lchild = NULL;
		S->rchild = NULL;
		T = S; 
	}
	else if(e > T->data) {
		InsertBST(T->rchild,e);
	}
	else if(e < T->data) {
		InsertBST(T->lchild,e); 
	}
}
BSTree SearchBST(BSTree T,int key) 
{
	if (!T||T->data == key) {
		return T;
	}
	else if (key > T->data) {
		return SearchBST(T->rchild,key);
	}
	else if (key < T->data) {
		return SearchBST(T->lchild,key);
	}
}
void CreatBST(BSTree &T) 
{
	T = NULL;
	int a[100],i;
	cin>>a[0];
	for (i=0; a[i]!=-1; i++) {
		InsertBST(T,a[i]);
		cin>>a[i+1];
	}
}
void InOrderTraverse(BSTree T) 
{
	if (T) {
		InOrderTraverse(T->lchild);
		cout<<T->data<<" ";
		InOrderTraverse(T->rchild);
	}
}
int main ()
{
	int key;
	BSTree T;
	CreatBST(T);
	InOrderTraverse(T);
	cin>>key;
	if (SearchBST(T,key)) {
		if (SearchBST(T,key)->lchild) {
			cout<<"左孩子: "<<SearchBST(T,key)->lchild->data<<"\n"; 
		}
		else {
			cout<<"无左孩子\n";
		}
		if (SearchBST(T,key)->rchild) {
			cout<<"右孩子; "<<SearchBST(T,key)->rchild->data<<"\n"; 
		}
		else {
			cout<<"无右孩子\n";
		}
	}
	else {
		cout<<"查找失败!"; 
	}
	return 0;
}

2,运行截图

技术图片
技术图片

二叉排序树的实现

标签:==   strong   nod   clu   int   出现   遇到   mic   调用   

原文地址:https://www.cnblogs.com/xzxzxzx/p/12733022.html

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