二叉排列树的实现
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;
}
以上是关于二叉排列树的实现的主要内容,如果未能解决你的问题,请参考以下文章
急!高分悬赏!求c语言高手!!!二叉树输入中如何判断输入是不是合法?
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段