二叉排序树需要用到的函数
1.CreateBiTree
2.InOrderTraverse
3.SearchBST
#include <iostream>
using namespace std;
typedef int InfoType;
typedef int KeyType;
typedef struct
{
KeyType key; //关键字项 key 关键
InfoType otherinfo; //其他数据域 info information 信息
} ElemType; //每个结点的数据域的指针 Elem element元素
typedef struct BSTNode
{
ElemType data; //每个结点的数据域包括关键字项和其他数据项
struct BSTNode *lchild,*rchild; //左右孩子指针
}BSTNode,*BSTree; //BST Binary Sort Tree 二叉排序树
void CreateBiTree(BSTree &T) //先序遍历建立二叉链表
{
static int a; //局部静态调用 适用于递归 每次调用值都不同
if(a==0) cout<<"依次输入树结点元素数据:\n"; a+=1; //只输出一次
int num1, num2;
cin>>num1>>num2;
if(num1 <= 0) T = NULL; //输入的值小于0即结束
else
{
T = new BSTNode;
T->data.key = num1; //关键字项
T->data.otherinfo = num2; //其他数据
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void InOrderTraverse(BSTree &T)
{
if(T!=NULL)
{
cout<<T->data.key<<" ";
InOrderTraverse(T->lchild) ;
InOrderTraverse(T->rchild) ;
}
}
//二叉排序树的查找
BSTree SearchBST(BSTree T,KeyType key) //查找关键字项等于key的结点
{ //若查找成功,则返回指向该数据元素结点的指针,否则返回空指针
if((!T)||key==T->data.key) return T;
else if (key<T->data.key) return SearchBST(T->lchild, key);
else return SearchBST(T->rchild,key);
}
int main()
{
BSTree T;
CreateBiTree(T) ; //7 1 4 2 1 3 0 0 0 0 6 4 0 0 0 0 9 5 0 0 0 0
InOrderTraverse(T); // 45 1 12 2 3 3 0 0 0 0 37 4 24 5 0 0 0 0 0 0 53 6 0 0 100 7 61 8 0 0 90 9 78 10 0 0 0 0 0 0 0 0
BSTNode *p= SearchBST(T,61); //otherinfo=8
cout<<"\nkey="<<p->data.key
<<"\nfind otherinfo="<<p->data.otherinfo<<endl;
return 0;
}
完整代码就在上面了,为简单起见,创建二叉树用的是创建普通二叉树的代码,所以需要输入二叉树为有序的。主函数后面已经附上了两个有序二叉树,可直接复制。
输入数据key otherinfo key otherinfo ... 交错输入,所以看起来会比较长。
我们来看一处小细节,
static int a; //局部静态调用 适用于递归 每次调用值都不同
if(a==0) cout<<"依次输入树结点元素数据:\n"; a+=1; //只输出一次
在创建函数中我们需要输入该提示语句,但如何确保只输出一次呢,我们用到了局部静态变量static,在其他递归函数中我们也可以使用相同的方法在几次需要的地方输出自己想输出的语句。
就介绍这么多,欢迎一起学习编程的小伙伴在评论区留言和我一起学习进步哦!