用二叉树的存储结构将一个二叉树变成二叉排序树

二叉排序树与平衡二叉树的实现 一、实验目的1、问题描述     分别采用二叉链表和顺序表作存储结构,实现对二叉排序树与平衡 二叉树的操作。2、设计功能要求(1)用二叉链表作存储结构实现二叉排序树。      1)以回车符(‘\n’)为输入结束标志,输入数列L,生成一棵二叉排序 树T;      2)对二叉排序树T作中序遍历,输出结果;      3)计算二叉排序树T查找成功的平均查找长度,输出结果;      4)输入元素x,... 阅读详情
#include <stdio.h>
#include <string.h>
#include <stdlib.h>/* 定义结构体 */
typedef  int TypeData;
typedef struct stBiTreeNode 
{
    TypeData data;
    struct stBiTreeNode *lchild, *rchild;
}BITREENODE;/* 
* 函数功能:判断要插入的数据是否存在 
* 函数参数:root 根节点
            data 要查询的数据
            lastNode 如果没有找到,则返回查找最后一个节点
* 返回值: 0 存在 1 不存在 2 树是空树
*/int isDataAlreadyExist(BITREENODE* root, TypeData data,BITREENODE** lastNode)
{
    BITREENODE* temp = root;
 
    /* 如果根节点是空的,则直接返回 */
    if(!temp)
    {
        return 2;
    }
 
    while(1)
    {
        /* 如果存在直接返回 */
        if(temp->data == data)
        {
            return 0;
        }
 
        if(temp->data < data)
        {
            if(temp->rchild == NULL)
            {
                /* 把最后一个节点的地址返回出去 */
                (*lastNode) = temp;
                return 1;
            }
            temp = temp->rchild;
        }
        else
        {
            if(temp->lchild == NULL)
            {
                /* 把最后一个节点的地址返回出去 */
                (*lastNode) = temp;
                return 1;
            }
            temp = temp->lchild;
        }
 
    }
}/* 在二叉排序树中插入数据 */BITREENODE* createSortBiTree(BITREENODE* root,TypeData data)
{
    int ret = 0;
    BITREENODE* pLastNode = NULL;
 
    /* 判断要插入的数据是否存在 */
    ret = isDataAlreadyExist(root,data,&pLastNode);
 
    /* 如果已经存在了 */
    if(ret == 0)
    {
        return root;
    }
 
    /* 如果没有找到,就把这个插入 */
    if(ret == 1)
    {
        BITREENODE* pNewNode = (BITREENODE*)malloc(sizeof(BITREENODE));
        pNewNode->data = data;
        pNewNode->lchild = pNewNode->rchild = NULL;
 
        /* 插入到右孩子 */
        if(pLastNode->data < data)
        {
            pLastNode->rchild = pNewNode;
        }
        /* 插入到左孩子 */
        else if(pLastNode->data > data)
        {
            pLastNode->lchild = pNewNode;
        }
 
    }
 
    /* 根节点是空的,则新建一个根节点*/
    if(ret == 2)
    {
        BITREENODE* pNewNode = (BITREENODE*)malloc(sizeof(BITREENODE));
        pNewNode->data = data;
        pNewNode->lchild = pNewNode->rchild = NULL;
 
        root = pNewNode;
    }
    return root;
}/* 中序遍历该二叉排序树 */int inOrderBiTree(BITREENODE* root)
{
    if(root)
    {       
        inOrderBiTree(root->lchild);
        printf("%d ",root->data);
        inOrderBiTree(root->rchild);
    }
    return 0;
}
 
int main()
{
    BITREENODE* root = NULL;
 
    /* 在二叉排序树种插入数据 */
    root = createSortBiTree(root,20);
    root = createSortBiTree(root,30);
    root = createSortBiTree(root,10);
    root = createSortBiTree(root,25);
 
    inOrderBiTree(root);
 
    printf("\n");
    return 0;
}

 

完全理解二叉树(下)——平衡二叉树、二叉排序树、哈夫曼树 二叉树的应用 1. 平衡二叉树 二叉树可以用于查找元素,对于如下这颗二叉树: 对其的遍历相当于对链表的遍历,因此找到元素5需要从头开始,查找5次,但是如果树的形状是这样: 从根结点出发只需要查找3次即可找到元素5。 1.1 定义 左右子树高度差不超过1的二叉树称为平衡二叉树(AVL树),注意是对于树中的任意结点。 例如: 都不是平衡二叉树。 结点的平衡因子 = 左子树高 - 右子树高,平衡因子的绝对值不超过1,如下图所示: 1.2 存储结构 typedef struct AVLTreeNode* 阅读详情

相关推荐

5. 二叉树定义、【满二叉树、完全二叉树、二叉排序树、平衡二叉树的定义】、二叉树的性质、二叉树的存储结构

二叉树定义、【满二叉树、完全二叉树、二叉排序树、平衡二叉树】、二叉树的性质、二叉树的存储结构

你说的白是什么白_ 685

由二叉树转换成二叉排序树

struct STreeNode{int key;STreeNode* left_child;STreeNode* right_child;};void InsertBST(STreeNode* t , int key){ if(NULL == t) { t = new STreeNode; t->left_child = t->right_child = NULL; t->key = key;

计算机的艺术 1809

基于Transformers库的BERT模型:一个文本情感分类的实例解析

简介 本文来讲述BERT应用的一个例子,采用预训练好的BERT模型来进行演示。BERT的库来源于Transformers,这是一个由PyTorch编写的库,其集成了多个NLP领域SOTA的模型,比如bert、gpt-2、transformer xl等,并且可以自由选择已经预训练好的模型参数,我们可以基于这些参数进行进一步的训练调试。 Part 1: 利用BERT基于特征的方式进行建模 1、任务与数...

蓝天白云梦的csdn博客 2万+

二叉树、二叉树排序树的实现及遍历

对于大量的数据而言,链表的线性访问时间太慢,不宜使用。本章节将会介绍一种简单的数据结构:树(tree),其大部分操作的运行时间平均为O(logN)。在数据结构中树是非常有用的抽象概念,在本篇中我们将讨论二叉树的存储结构、二叉树的遍历和二叉排序树的实现,为后续平衡树以及高阶搜索树打下基础。我们下次将详细讲解二叉平衡树的增删查改。...

ZER00000001的博客 1148

分类模型AUC低于0.5?5个常见坑点排查指南(附代码示例)

本文针对分类模型AUC低于0.5的常见问题,提供了5个关键排查点及代码示例。从样本分布失衡、特征与标签脱节到量纲差异、模型初始化和数据泄露,详细解析了可能导致AUC异常的原因,并给出实用的诊断方法和解决方案,帮助开发者快速提升模型性能。

weixin_29190169的博客 239

HighTec安装使用

HighTec安装使用

qq_43552564的博客 3833

【数据结构】删除二叉树中的结点;树与二叉树的相互转换(含二叉树/二叉排序树的基本运算)

(1)首先判断要删除的结点是否存在,如果不存在则直接返回NULL。(2)如果要删除的结点小于当前结点,则递归删除左子树中的结点。(3)如果要删除的结点大于当前结点,则递归删除右子树中的结点。(4)如果要删除的结点等于当前结点,则分四种情况进行处理:情况1:要删除的结点是叶子结点,直接删除即可。情况2:要删除的结点只有右子树,将右子树替换当前结点即可。情况3:要删除的结点只有左子树,将左子树替换当前结点即可。情况4:要删除的结点既有左子树又有右子树,将右子树中的最小值替换当前结点即可。

m0_71071692的博客 1781

pdb文件删除杂原子 HETATM;保留或去除水分子

这样操作水分子也会跟着删除,如果需要保留水分子。

weixin_42357472的博客 2644

把任意二叉树调整为AVL树(平衡二叉树)

平衡因子是针对树中的结点来说的,一个结点的平衡因子为其左子树的高度减去右子树高度的差。每插入一个新的结点,就需要检查新结点的插入是否使得原平衡二叉树失去平衡,如果失去平衡则需要进行平衡调整。它的左右子树都是平衡二叉树,并且左右子树的高度之差的绝对值不超过1。平衡二叉树就是一棵二叉排序树,是二叉排序树的改进,提高了查找效率。//不能保证传入的二叉树是不是完全二叉树。//返回以TreeNode为根节点的数的高度,AVL树即是平衡二叉树,是一种特殊的二叉排序树。//如果新的树右边为null,

南川北渔 380

(11-3-03)多任务与元强化学习:综合实战:基于元强化学习的迷宫导航系统(3)

本文介绍了策略网络隐空间可视化的实现方法及其在强化学习中的应用。通过设计visualize_latent_space函数,使用t-SNE算法将高维隐空间特征降维至二维进行可视化,直观展示策略网络在不同任务中的特征分布。文章详细阐述了实现流程:状态收集、t-SNE降维和可视化绘图,并提供了完整的Python代码示例。实验结果表明,该方法能有效分析策略网络的学习过程与适应能力,为优化模型提供重要依据。同时,文章还介绍了主程序的完整流程,包括环境初始化、元智能体训练与评估、学习策略比较等环节,最后对实验结果进行可

码农三叔 1041

零基础基于U-Net网络实战眼底图像血管提取

文章目录1 前言2 血管提取任务概述3 U-Net架构简介4 眼底图像血管分割代码5 结果评估可视化(ROC曲线)6 改进U-Net网络完成眼底图像血管提取任务思路 1 前言 本文基于U-Net架构完成了视网膜血管的提取任务,基于Keras框架更简单的实现分割,网络、工具类、训练和预测的代码一目了然

NJU phd 在读。 5200

算法---二叉排序树

算法---二叉排序树 定义: 二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 数据结构:

oslo---let's go 508

RK3568 Android14 移远GNSS卫星导航模组LC760Z GPS北斗定位模块调试

Rockchip RK3568 作为一款高性能、低功耗的国产SoC,被广泛应用于工业网关、车载中控和智能手持终端等领域。在这些应用场景中,位置服务(Location Service) 往往是不可或缺的功能。本文将详细记录如何集成GPS模组到 RK3568 开发板上,通过 UART(串口)接口集成通用的 GPS 模块(如 移远LC760Z 或 EC20 4G 模块自带的 GPS 功能也差不多),并实现数据的解析与上层应用对接。

qq_33427070的博客 1412

判断一颗二叉树是否是二叉排序树

1. 问题描述: 设计一个算法,判断给出的二叉树是否是二叉排序树,假设二叉排序树已经存储在二叉链表的存储结构中,树节点的个数为n,节点值为int类型 2. 思路如下: ① 判断一颗二叉树是否是二叉排序树的方法有好几种,其中最简单的方法是对给定的二叉树进行中序遍历,假如二叉树是二叉排序树那么中序遍历的结果一定是递增的,假如不是那么就不是二叉排序树 ② 基于上面的想法我们可以使用中序遍历的方法...

二哈 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

二叉排序树和平衡二叉树

二叉排序树 定义 二叉排序树或者是空树,或者是满足以下性质的二叉树: 1)左子树不为空,则左子树上所有关键字的值均小于根关键字的值。 2)右子树不为空,则右子树上所有关键字的值均大于根关键字的值。 3)左右子树各是一棵二叉排序树。 存储结构 二叉排序树采用二叉链表进行存储,结点类型类似于一般的二叉树。 typedef struct BTNode { int key; // 关键字 ...

张小艾博客 4663

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

判定给定二叉树是否为二叉排序树

描述试写一个判定给定二叉树是否为二叉排序树的程序,设此二叉树以二叉链表做存储结构,且结点的关键字均不同 输入 输入一个二叉树的先序序列,若某个节点没有左孩子(右孩子),则左孩子(右孩子)用0表示 输出 输出二叉树的中序遍历序列,并判断该二叉树是否为二叉排序树,若是,则输出“ItisanBinaryOrderTree!”,否则输出“ItisnotanBinaryOr...

qq_43252509的博客 7496

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据结构之树与二叉树(二叉排序树、平衡二叉树、哈夫曼树)

一、树 1、树的定义 树:n个节点的有限集。n=0时为空树。 (1)有且仅有一个根节点,根结点没有前驱; (2)当n>1时,其余节点可分为m个互不相交的有限集,其中每个集合本身又是一棵树,称为根的子树。 2、树的基本术语 (1)祖先:根A到结点K的唯一路径上的任意结点,称为K的祖先。 (2)结点的度:树中一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度。 (3)分支结点:度大于0的结点称为分支结点。 (4)结点的深度:从根节点开始自顶向下逐层累加的; 结点的高度:从叶结点开始自底向上.

qq_43752469的博客 2192

二叉树、满二叉树、完全二叉树、二叉排序树、平衡二叉树

目录 1.基本概念 1.1二叉树是有序树 1.2二叉树 1.3特殊的二叉树 1.3.1满二叉树 1.3,2完全二叉树 1.4 二叉树的性质 二叉排序树 平衡二叉树 二叉树的存储结构 1.基本概念 1.1二叉树是有序树 二叉树是树形结构中一种特殊的树形结构: 1.二叉树中的每个结点至多有2棵子树(即每个结点的度小于等于2) 2.两个子树有左右之分,顺序不可颠倒。 在二叉树中还有种特殊的二叉树就是完全二叉树:所有结点中除了叶子结点以外的结点都有两棵子树...

qq_51066068的博客 2394

树表——二叉排序树与平衡二叉树

哎

weixin_62917800的博客 2581

二叉树的定义、常见的性质及其存储结构(C语言)

一、二叉树的定义与基本术语 (一)基本概念 二叉树是n(n≥0)个结点的有限集合: ① 或者为空二叉树,即n = 0。 ② 或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。 特点:①每个结点至多只有两棵子树 ②左右子树不能颠倒(二叉树是有序树)【注意区别:度为2的有序树】 1. 二叉树的五种状态 (二)几种特殊的二叉树 1. 满二叉树 && 完全二叉树 2. 二叉排序树 一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树: ①、

派拉斯兔子的博客 5621

数据结构—树与二叉树(Part Ⅴ)—二叉排序树

树与二叉树

Miss Z的博客 909

《数据结构》—— 二叉树的定义、种类、性质与存储结构

满二叉树、 完全二叉树、二叉排序树、平衡二叉树

博樽 1412

判断二叉树是否为二叉排序树

#include <iostream> #include <stack> #include <queue> #include<limits.h> using namespace std; #define MINKEY INT_MIN //关键字的下限 class Treenode{ public: int dat...

loveAC233的博客 1455

【数据结构】:二叉树,线索二叉树,排序二叉树,AVL树

文章目录前言一 二叉树0)二叉树较为重要的种类1. 满二叉树2.完全二叉树1) 二叉树的存储结构2) 初始化二叉树3)创建二叉树1.创建二叉树的方式 12.创建二叉树 23.创建二叉树 34)遍历二叉树1.前序递归遍历2.中序递归遍历3.后序递归遍历4.层次遍历5)前序非递归遍历 前言 二叉树分好多种: 我在这里分享四种二叉树的基本操作集合。 普通的二叉树(二叉树) 线索二叉树 搜索二叉树 平衡(AVL)二叉树 一 二叉树 0)二叉树较为重要的种类 满二叉树和完全二叉树。 1. 满二叉树 一棵二叉树,除

呋喃吖的博客 1537
上一篇: 树
黑色吊椅
博客等级 码龄9年 102粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值