二叉排列树的实现

Posted lim-m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉排列树的实现相关的知识,希望对你有一定的参考价值。

SearchBST(T, key)
伪代码&&代码
void SearchBST(BiTree T, int key)//查找
{
	if (T为空)return;
	else if (T的值 == key)cout << "查找成功" << endl;
	else if (T的值 > key)SearchBST(T->rchild, key);右子树查找
	else if (T的值 > key)SearchBST(T->lchild, key);左子树查找
}
void SearchBST(BiTree T, int key)//查找
{
	if (T==NULL)return;
	else if (T->data == key)cout << "查找成功" << endl;
	else if (T->data > key)SearchBST(T->rchild, key);
	else if (T->data > key)SearchBST(T->lchild, key);
}
InsertBST(T, key)
伪代码&&代码
void InsertBST(BiTree T, int key)//插入
{
	
	if (T为空) {
		新建T
	}
	else{
		if (T的值 == key)return;
		else if (key<T的值)InsertBST(T->lchild, key);左子树插入
		else if (key > T的值)InsertBST(T->rchild, key);右子树插入
	}
}
void InsertBST(BiTree T, int key)//插入
{
	
	if (T == NULL) {
		T = new BiTNode;
		T->lchild = NULL;
		T->rchild = NULL;

	}
	else{
		if (T->data == key)return;
		else if (key<T->data)InsertBST(T->lchild, key);
		else if (key > T->data)InsertBST(T->rchild, key);
	}
}
CreateBST(T)
伪代码&&代码
void CreateBST(BiTree T)//创建
{
	if(T为空){
	新建T;
	}
	char str[20];
	cin >> str;
	
	for (int i = 0; str[i] != ‘‘; i++) {//使用数组循环插入
		InsertBST(T, str[i]);
		}
}
void CreateBST(BiTree T)//创建
{
	if(T==NULL){
	T=new BiTNode;
	T->lchild = new BiTNode;
	T->rchild = new BiTNode;
	T->lchild = NULL;
	T->rchild = NULL;
	}
	char str[20];
	cin >> str;
	
	for (int i = 0; str[i] != ‘‘; i++) {
		InsertBST(T, str[i]);
		}
}
DeleteBST(T, key)
伪代码&&代码
void DeleteBST(BiTree T, int key)//删除
{
	if (T的值 == key) {
		if (T->rchild 不为空) {
			if (T->lchild 不为空) {
				T->rchild->lchild = T->lchild;右孩子先指向左孩子,再释放T;
				free(T);
			}
			else free(T);右孩子为空,无论左孩子是否存在,都释放T
		}
		else if (T->lchild 不为空)free(T);左孩子不存在,无论右孩子释放存在,都释放T
	}
}
void DeleteBST(BiTree T, int key)//删除
{
	if (T->data == key) {
		if (T->rchild != NULL) {
			if (T->lchild != NULL) {
				T->rchild->lchild = T->lchild;
				free(T);
			}
			else free(T);
		}
		else if (T->lchild != NULL)free(T);
	}
}
完整代码
#include<iostream>
using namespace std;

typedef struct BiTNode {
	int data;
	struct BiTNode* lchild;
	struct BiTNode* rchild;
}BiTNode, * BiTree;
void SearchBST(BiTree T, int key);
void InsertBST(BiTree T, int key);
void CreateBST(BiTree T);
void DeleteBST(BiTree T, int key); 
void InorderTraverse(BiTree T);

void SearchBST(BiTree T, int key)//查找
{
	if (!T)return;
	else if (T->data == key)cout << "查找成功" << endl;
	else if (T->data > key)SearchBST(T->rchild, key);
	else if (T->data > key)SearchBST(T->lchild, key);
}
void InsertBST(BiTree T, int key)//插入
{
	
	if (T == NULL) {
		T = new BiTNode;
		T->lchild = NULL;
		T->rchild = NULL;

	}
	else{
		if (T->data == key)return;
		else if (key<T->data)InsertBST(T->lchild, key);
		else if (key > T->data)InsertBST(T->rchild, key);
	}
}
void CreateBST(BiTree T)//创建
{
	if(T==NULL){
	T=new BiTNode;
	T->lchild = new BiTNode;
	T->rchild = new BiTNode;
	T->lchild = NULL;
	T->rchild = NULL;
	}
	char str[20];
	cin >> str;
	
	for (int i = 0; str[i] != ‘‘; i++) {
		InsertBST(T, str[i]);
	}
}
void DeleteBST(BiTree T, int key)//删除
{
	if (T->data == key) {
		if (T->rchild != NULL) {
			if (T->lchild != NULL) {
				T->rchild->lchild = T->lchild;
				free(T);
			}
			else free(T);
		}
		else if (T->lchild != NULL)free(T);
	}
}
void InorderTraverse(BiTree T)//中序遍历
{
	if (T)
	{
		InorderTraverse(T->lchild);
		printf("%d ", T->data);
		InorderTraverse(T->rchild);
	}
}
int main()
{
	int key;
	BiTree T;
	T = new BiTNode;
	CreateBST(T);
	cout << "中序输出" << endl;
	InorderTraverse(T);
	cout << "请输入查找数据" << endl;
	cin >> key;
	SearchBST(T, key);
	InsertBST(T, key);
	
	return 0;
}

以上是关于二叉排列树的实现的主要内容,如果未能解决你的问题,请参考以下文章

P1030 求先序排列

洛谷 P1030 求先序排列 Label:None

求先序排列

数据结构 二叉树的简单理解和代码实现

急!高分悬赏!求c语言高手!!!二叉树输入中如何判断输入是不是合法?

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段