数据结构与算法基础(王卓)(29):二叉排序树

目录

二叉排序树(Binary Sort Tree)

前置条件:

二叉排序查找(递归算法)

运行框架/构建思路:

程序实现:

标准答案:

二叉排列树的插入

二叉排列树的删除

二叉排列树的生成


二叉排序树(Binary Sort Tree)

前置条件:

#include<iostream>
using namespace std;

typedef int KeyType;
typedef int InfoType;

struct ElemType
{
    KeyType key;  //关键字
    InfoType otherinfo;  //其他数据域
};

struct BSTNode
{
    ElemType data;  //数据域
    struct BSTNode* lchild, * rchild;  //左右孩子指针
};
typedef BSTNode * BSTree;
BSTree T;  //定义二叉排序树T

二叉排序查找(递归算法)

运行框架/构建思路:

    //若树为空,返回空
    // 后面转念一想,空树也是这个二叉树类型,所以为空就像和成功一样,直接输出
    //比较key和根节点
    // 成功:输出

    //失败:大于看右子树,小于看左子树

    //循环重复该操作

程序实现:

BSTree SearchBST(BSTree T, KeyType key)
{
    //若树为空,返回空
    // 后面转念一想,空树也是这个二叉树类型,所以为空就像和成功一样,直接输出
    //比较key和根节点
    // 成功:输出
    if ((key == T->data.key) || (!T))
        return T;
    //失败:大于看右子树,小于看左子树
    else if (key > T->data.key)
    {
        T = T->rchild;
        return  SearchBST(T, key);
    }
    else if (key < T->data.key)
    {
        T = T->rchild;
        return  SearchBST(T, key);
    }
    //循环重复该操作
}

标准答案:

就是把:

        T = T->rchild;
        return  SearchBST(T, key);

合并为一步:

         return SearchBST(T->rchild, key);  //在右子树继续查找

BSTree SearchBST(BSTree T, KeyType key)
{
    if ((key == T->data.key) || (!T))
        return T;
    else if (key > T->data.key)
        return SearchBST(T->lchild, key);
    else
        return SearchBST(T->rchild, key);
}

二叉排列树的插入

//二叉排列树的插入
void InsertBSTree(BSTree& T, ElemType& e)
{
    if (!T)
    {
        T =new BSTNode;
        T->data = e;
    }

    if (T->data.key == e.key);
    //已有该元素,退出
    else if (e.key > T->data.key)
        InsertBSTree(T->rchild, e);
    else if (e.key < T->data.key)
        InsertBSTree(T->lchild, e);
}

二叉排列树的删除

较为复杂


二叉排列树的生成

// 二叉排列树的生成
void CreatBSTree(BSTree & T)
{
    //输入序列(也可以从形参传入)
    cout << "input info about the tree" << endl;
    vector<ElemType> vec;
    ElemType input;
    while (cin >> input.key)
    {
        vec.push_back(input);
    }
    //调用插入算法
    for (vector<ElemType>::iterator it = vec.begin(); it != vec.end(); ++it)
    {
        InsertBSTree(T, *it);
    }
}

猜你喜欢

转载自blog.csdn.net/Zz_zzzzzzz__/article/details/130161267
今日推荐