// 链式二叉查找树的各种操作.cpp
#include "stdafx.h"
#include<iostream>
using namespace std;
struct BSTree
{
int data;
BSTree *left;
BSTree *right;
};
BSTree *T=NULL;
int a[100];
//插入排序二叉树
void insert(BSTree *b,BSTree *s)
{
if(b==NULL)
{
b=s;
}
else if(s->data==b->data)
return;
else if(s->data<b->data)
insert(b->left,s);
else
insert(b->right,s);
}
//创建排序二叉树
void createBSTree(BSTree *b,int *a,int n)
{
int i;
for(i=0;i<n;i++)
{
BSTree *s = (BSTree*)malloc(sizeof(BSTree));
s->data=a[i];
s->left=NULL;
s->right=NULL;
insert(b,s);
}
}
//查询排序二叉树
BSTree *search(BSTree *b,int x)
{
if(b==NULL)
return NULL;
else
{
if(b->data==x)
return b;
else if(b->data>x)
return search(b->left,x);
else
return search(b->right,x);
}
}
//前序遍历排序二叉树
void preOrder(BSTree *b)
{
if(b==NULL)
return;
else
{
cout<<b->data<<" ";
preOrder(b->left);
preOrder(b->right);
}
}
//中序遍历排序二叉树
void inOrder(BSTree *b)
{
if(b==NULL)
return ;
else
{
inOrder(b->left);
cout<<b->data<<" ";
inOrder(b->right);
}
}
//后序遍历排序二叉树
void postOrder(BSTree *b)
{
if(b==NULL)
return ;
else
{
postOrder(b->left);
postOrder(b->right);
cout<<b->data<<" ";
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int cases;
cout<<"请输入案例个数:"<<endl;
cin>>cases;
while(cases--)
{
int n;
cout<<"请输入元素个数:"<<endl;
cin>>n;
int i;
cout<<"请输入这些元素:"<<endl;
for(i=0;i<n;i++)
cin>>a[i];
cout<<"建立二叉排序树:"<<endl;
createBSTree(T,a,n);
cout<<"二叉排序树建立成功!"<<endl;
cout<<"请选择您要进行的操作:1.插入(I/i)、2.查找(S/s)、3.先序输出(P/p)、4.中序输出(M/m)、5.后序输出(L/l)"<<endl;
char s;
cin>>s;
if(s=='I'||s=='i')
{
cout<<"请输入您要插入的值:"<<endl;
int x;
cin>>x;
BSTree *p =(BSTree*)malloc(sizeof(BSTree));
p->data = x;
p->left = NULL;
p->right = NULL;
insert(T,p);
cout<<"插入成功!"<<endl;
}
else if(s=='S'||s=='s')
{
cout<<"请输入您要查找的值:"<<endl;
int x;
cin>>x;
BSTree *p=search(T,x);
cout<<"查找的值为:"<<p->data<<endl;
if(p->left != NULL)
cout<<"其左儿子的值为:"<<p->left->data<<endl;
if(p->right != NULL)
cout<<"其右儿子的值为:"<<p->right->data<<endl;
}
else if(s=='P'||s=='p')
{
cout<<"其前序输出为:"<<endl;
preOrder(T);
}
else if(s=='M'||s=='m')
{
cout<<"其中序输出为:"<<endl;
inOrder(T);
}
else
{
cout<<"其后序输出为:"<<endl;
postOrder(T);
}
cout<<endl;
}
system("pause");
return 0;
}
分享到:
相关推荐
用C++实现的最优二叉查找树,简单,明了,是数据结构里经典必学算法,初学者适用
二叉查找树的C++实现
这个程序实现了二叉查找树的删除,增加,先序遍历,后序遍历,中序遍历,还有一些非递归和层次遍历!
这是我自己用C++写的一个二叉查找树的链表实现。由于是老师突然布置的课程实验,时间比较匆忙,所以在写代码的过程中首先考虑的代码的功能的实现,而忽视了代码的可读性和健壮性,有的代码并不是最佳的功能实现。贴...
C++实现的二叉查找树,算是AVL树的雏形。
二叉查找树的常用操作,含C++代码,找工作的时候可以放在手机里看。
资源内容:完整的二叉查找树C++头文件,包括运算符重载,bst类构造器、bst类析构器、destroy()、size()、insert(),迭代器类的声明与实现,++运算符重载(前置、后置)、--运算符重载、*运算符重载、!=运算符重载、...
c++实现的二叉查找树,代码简陋,大家互相学习即可
课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的
二叉查找树实现简单的信息检索
1、 定义二叉查找树的类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)实现二叉查找树结构; 2) 实现二叉查找树的查找、插入和删除等算法;
这里是二叉查找树的实现代码,如果有不明白的可以联系我,很多其他的C++代码我都有
二叉查找树的插入、删除、遍历和查找等操作的C++实现,二叉查找树采用泛型结构
数据结构,二叉排序树的C++源代码。可以实现插入,删除,查找功能。
二叉查找树实现源码(C、C++、JAVA)
printf("1.显示\n"); printf("2.查找\n"); printf("3.插入\n"); printf("4.删除\n"); printf("5.退出\n");
c语言实现的用动态规划实现最优二叉查找树,,,具体参见附件,2.txt中的内容为: 5 0.15 0.10 0.05 0.10 0.20
二叉查找树的插入、搜索、删除、寻找前驱结点、寻找后继结点
设计一个算法程序,使得该程序从二叉检索树中删除一个结点,并仍然保持二叉检索树的特性不变 实验要求: 创建一棵二叉检索树,然后用中序遍历查找要删除的结点的后继结点