【学习笔记】数据结构-二叉排序树的查找

二叉排序树需要用到的函数

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,在其他递归函数中我们也可以使用相同的方法在几次需要的地方输出自己想输出的语句。

就介绍这么多,欢迎一起学习编程的小伙伴在评论区留言和我一起学习进步哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值