• 数据结构二叉排序树应用一


    2022.11.19


    任务描述

    本关任务:输入一个无序序列,创建一棵二叉排序树。

    相关知识

    为了完成本关任务,你需要掌握:1.二叉排序树定义,2.如何创建一棵二叉排序树。

    二叉排序树定义
    二叉排序树:即一个二叉树,它的每一个结点的左孩子的data值比当前结点的data值小,而右孩子结点的data值比当前结点的data值大。
    在这里插入图片描述
    如何创建一棵二叉排序树
    二叉排序树的创建过程:

    1. 创建一个根节点,将无序序列的第一个元素放入根节点;
    2. 依次将后面的无序序列依次插入二叉排序树,若比根节点值小,则递归插入左子树,否则递归插入右子树。

    编程要求

    本关的编程任务是补全右侧代码片段insertBiSortTree和creatBiSortTree中Begin至End中间的代码,具体要求如下:

    1. 在insertBiSortTree中,实现向升序二叉排序树插入元素;
    2. 在creatBiSortTree中,实现创建升序二叉排序树。

    测试说明

    平台将自动编译补全后的代码,并生成若干组测试数据,接着根据程序的输出判断程序是否正确。

    以下是平台的测试样例:

    测试输入
    15
    18 10 16 13 7 5 4 8 15 14 20 1 6 3 19
    预期输出
    1 3 4 5 6 7 8 10 13 14 15 16 18 19 20

    输入说明
    第一行:元素个数n
    第二行:n个无序数列

    输出说明
    二叉排序树的中序遍历是有序序列,程序输出中序遍历结果

    开始你的任务吧,祝你成功!

    C/C++代码

    //
    //  binary_sort_tree.cpp
    //  BinarySortTree
    //
    //  Created by ljpc on 2018/5/11.
    //  Copyright © 2018年 ljpc. All rights reserved.
    //
    
    #include "binary_sort_tree.h"
    
    BiTreeNode* insertBiSortTree(BiTreeNode* root, int key)
    // 功能:实现向升序二叉排序树插入元素
    // 输入:待插入元素key
    // 返回:升序二叉排序树根节点
    {
        // 请在这里补充代码,完成本关任务
        /********** Begin *********/
        if (root == NULL)
        {
            BiTreeNode *newNode = new BiTreeNode(key);
            return newNode;
        }
        if (root->data > key)
        {
                
            if (root->left != NULL)
            {
                insertBiSortTree(root->left, key);
            }
            else
            {
                BiTreeNode *newNode = new BiTreeNode(key);
                root->left = newNode;
            }
        }
        else if (root->data < key)
        {
            if (root->right != NULL)
            {
                insertBiSortTree(root->right, key);
            }
            else
            {
                BiTreeNode *newNode = new BiTreeNode(key);
                root->right = newNode;
            }
        }
        return root;
        /********** End **********/
    }
    
    BiTreeNode* creatBiSortTree(int* arr, int n)
    // 功能:实现创建升序二叉排序树
    // 输入:无序整数数列arr,数列个数n
    // 返回:升序二叉排序树根节点
    {
        // 请在这里补充代码,完成本关任务
        /********** Begin *********/
        if (arr == NULL)
        {
            return NULL;
        }
        int *p = arr;
        BiTreeNode* root = NULL;
        for (int i = 0; i < n; i++) {
            root = insertBiSortTree(root, *p++);
        }
        return root;
        /********** End **********/
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
  • 相关阅读:
    Vulnhub实战-DC9
    How to get ‘kernel config‘ when CONFIG_IKCONFIG is not set ? (Preliminary)
    007python-列表
    vue2.x + zTree,简单的二次封装(二) -- 添加模糊搜索功能
    JMeter动态线程组和动态吞吐量
    基于canvas实现的多功能画板
    带你深入理解“栈”(c语言 c++和stl Stack三个版本的模拟实现)
    C++:vector
    Linux常用命令(下).
    vue中深度选择器
  • 原文地址:https://blog.csdn.net/m0_63142359/article/details/127934493