满二叉树存放于一维数组中交换左右子树

二叉树核心概念辨析:真二叉树、满二叉树与完全二叉树详解 在数据结构与算法领域,树形结构是组织与存储数据的核心模型之一,而二叉树作为其基础且应用最广泛的形式,深刻理解其不同类型对于设计高效算法至关重要。从原理上讲,二叉树通过节点与边的特定规则,实现了数据的分层组织与快速检索。其技术价值在于能以对数级时间复杂度支持高效的查找、插入与删除操作,是构建更复杂数据结构的基石。在应用场景上,二叉树广泛应用于数据库索引、文件系统、编译器语法分析以及各类搜索与排序算法中。其中,真二叉树、满二叉树和完全二叉树是三种关键且易混淆的形态。真二叉树要求节点度数为0或2,是哈夫曼编码等压 阅读详情

满二叉树储存在一维数组int T[]中,数组下标从1开始,设计算法交换满二叉树的左右节点。

如果有问题欢迎交流。

#include <stdio.h>
int T[] = {0,5,7,3,1,2,6,9,4,6,3,1,5,2,8,7};
int len_1 = 15;
int T2[] = {0,5,7,3,1,2,6,9};
int len_2 = 7;
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
void change(int n, int i) {
    if (2*i <= n) { // 确保左子节点在数组范围内
        int leftChild = 2*i;
        int l = leftChild;
        int r = 2*i + 1;
        // 交换左右子节点的值
        swap(&T[leftChild], &T[r]);
        int temp = leftChild * 2;
        leftChild = 2;//相当于到下一层然后需要重新从间隔2开始算起
        while (temp-1 < n)
        {
            //printf("%d\n", temp);
            int t = temp;
            for (int i = leftChild; i > 0; i--) {
                swap(&T[t], &T[t + leftChild]);
                t++;
            }
            leftChild = leftChild * 2;
            temp = temp * 2;
        }
        // 对左右子节点分别递归进行交换
        change(n, l);
        change(n, r);
    }
}
int main() {
    int len = len_2;
    for(int i=1;i<=len;i++){
        printf("%d\t", T[i]);
    }
    printf("\n");
    change(len, 1);
    for(int i=1;i<=len;i++){
        printf("%d\t", T[i]);
    }
}

二叉树(Binary Tree) 二叉树(Binary Tree)是n个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。 二叉树特点: 每个结点最多有两棵子树;左子树和右子树是有顺序的,次序不能颠倒。介绍了特殊二叉树,分别为斜树、满二叉树和完全二叉树。重点介绍了二叉树的五个性质,还有二叉树的顺序存储结构和链式存储结构,顺序结构仅适于完全二叉树,链式存储较灵活。二叉树的建立 阅读详情

相关推荐

数据结构———— 堆

数据结构堆详细介绍

qq_63976098的博客 643

满二叉树(一维数组)的所有结点的左右子树交换的C++实现

源代码 #include <iostream> #include <cmath> using namespace std; template <typename T> void Reverse(T a[], int begin, int end) { for (int i = begin, j = end; i < j; i++, j--) { ...

Rein的博客 365

单总线协议(1—Wire bus)【DS2431】

1—Wire 协议定义了复位脉冲、 应答脉冲、写0、写1、读0和读1时序等几种信号类型。所有的单总线命令序列(初始化ROM 命令功能命令)都是由这些基本的信号类型组成的。识别单总线器件(ROM 命令)单总线器件交换数据(功能命令)初始化单总线器件(初始化)

qq_41883039的博客 1147

二叉树[完全二叉树堆的实现]

二叉树二叉树的概念二叉树的特点特殊二叉树二叉树的性质完全二叉树的顺序结构及实现创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 二叉树的概念 一颗二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上左子树和柚子树的二叉树组成 二叉树的特点 1、每个结点最多有俩个子树,每个结点的度不超过2 2、二叉树子树有左右之分,并且次序不能颠倒 特

qq_40663638的博客 574

泛微ecology9 HRMwebservice接口实战:企业组织架构与人员信息同步指南

本文详细介绍了泛微ecology9 HRMwebservice接口在企业系统集成中的实战应用,重点解析了如何通过该接口实现组织架构与人员信息的双向同步。内容涵盖环境配置、核心接口调用、数据格式规范及常见错误排查,旨在帮助开发与运维工程师高效完成主数据同步,提升企业IT管理效率。

weixin_29323365的博客 498

哈工大集合论与图论(下)慕课MOOC答案

答案选自2023哈工大集合论与图论慕课,慕课的题重复率很高并且具有极高的相似性,选答案时要格外注意对比选项,能力有限答案不一定面面俱到,整理不易读者且用且珍惜。

qq_34168477的博客 2903

【C语音 || 数据结构】二叉树--堆

二叉树是一种重要的数据结构,其中每个节点最多有两个子节点:左子节点和右子节点。它常用于实现搜索算法、排序算法、数据存储和图形表示等。二叉树具有递归性,可以通过遍历算法(如前序、中序、后序和层次遍历)来访问其节点。学习和理解二叉树对于掌握更复杂的数据结构和算法至关重要。

2301_76766304的博客 2027

【数据分析/商业分析】面试题整理——SQL专题

数据分析\商业分析—面试题整理 自己总结的SQL类的面试题 文章目录数据分析\商业分析—面试题整理1.新增用户2.活跃用户数量3.连续登录4.次(n)日留存5.每个科目下分数最高的两名学生

awater_17的博客 1859

【无标题】二叉树的学习

二叉树的基本认识 二叉树是一种特殊的树。在二叉树中,每个结点最多有两个后继,这样的存储结构更容易实现。 在一颗非空的二叉树中,每个结点最多有两棵子树,分别成为左子树和右子树,且左右子树的顺序不能交换,二叉树是特殊的有序树。 2.二叉树的形态 由三个结点所构成的二叉树是有五种形态的(不考虑结点值的差异) 3.二叉树的性质 **性质一:**在二叉树的第i层上至多有2的(i-1)次方个结点 **性质二:**深度为h的二叉树中至多有2点h次方减1个结点 **性质三:**对任意一课二叉树G,如果其叶子结点为m,度为

m0_59616244的博客 1025

RK3568平台(USB篇)USB Gadget 驱动

USB 设备驱动,按照设备端关联的 USB 控制器 是工作在 主模式 还是 从模式,分为 USB 设备主机侧驱动 (主模式),或者 USB 设备从机侧驱动 (从模式)。同时,工作在 主模式 的 USB 控制器,称为 USB 主机控制器 (UHC: USB Host Controller),工作在 从模式 的 USB 控制器,称为 USB 设备控制器 (UDC: USB Device Controller)。有的 USB 控制器,只能工作在 主模式 或 从模式 中的某一种;

weixin_49303682的博客 1438

利用RFIDIOt和NFC进行Hitag2密码暴力破解: Python代码实现

RFID即无线射频识别,是一种通信技术,可以通过无线电信号读取、捕获和保存终端上的信息。这项技术在物流、零售、医疗等领域有着广泛的应用。NFC即近场通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输。Hitag2是一种常见的RFID标签,广泛应用于汽车防盗系统、门禁系统等。由于其安全性在过去被广泛认可,很多设备都采用了这种标签。但近年来随着密码破解技术的发展,Hitag2的安全性受到了一些挑战。

qq_38334677的博客 1561

从头开始理解树,二叉树(基础认知)

以下是一些废话,不感兴趣的可以直接跳过(xx) 得知数据结构要期中考试,因为老师讲课的时候一直在摸鱼,所以对树真的一窍不通,为了平稳的活过期中考试,只好从头开始学了(大家千万不要学我),期中考完后发现自己白预习了,学的都没考,但学到的知识如果既没有检验也没有分享的话实在是太可惜了!!!所以,和大家分享一下我对树的简单认知吧~ 一、官方背书 树是什么?树是由N个结点组成的有限集合。就是这么个图片,相关基础大概认知我们从书本上,或者随便百度都可以看到的。我们这里要讲的重点不是这些 ...

qq_54151629的博客 189

【020】C++ 动态内存管理解析:new 和 delete 的正确使用

C++中的动态内存分配是在程序运行时根据需要进行内存空间的分配和释放,与静态内存分配相比,具有更大的灵活性和适应性。动态内存分配可以通过new和delete或者malloc()和free()等函数实现。在程序运行时无法确定所需的内存大小。需要在多个函数之间共享数据,并且数据可能被频繁地创建和销毁。静态数组无法满足需求,例如需要支持可变长度数组。如果在动态分配内存后忘记了释放它,则会导致内存泄漏。为避免内存泄漏,可以使用智能指针或手动管理内存的方式来释放动态分配的内存。

Lion_Long的博客 1470

二叉树和堆【超详细】

①对于下标为i的节点:父亲节点下标为(i-1)/2,左孩子节点下标为2×i+1,右孩子下标为2×i+2②建大小堆的区别就在于调整算法时父亲和孩子的大小关系。③向下调整建堆的时间复杂度为O(N)。④堆是一种数据结构,堆排序是一种效率很高的排序方式,时间复杂度为O(N×logN)

happy_gawang的博客 3210

部署OpenClaw(ClawdBot、MoltBot)后访问localhost:18789报1008错误怎么办?

部署openclaw(曾用名ClawdBot、MoltBot)后访问localhost:18789出现1008授权错误❌?本文分享如何快速解决这个问题✅

XiaoqiangClub的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

数据结构之二叉树和堆

树 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树 节点的度:一个节点含有的子树的个数称为该节点的度; 叶节点或终端节点:度为0的节点称为叶节点; 非终端节点或分支节点:度不为0的节点; 双亲节点或父节点:若一个节点含有子节点,则这个节

weixin_44456232的博客 338

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

二叉树基础学习

1.什么是二叉树二叉树是,它的核心特征是每个节点最多只有两个子节点,分别被称为和。一个二叉树要么是空树(没有任何节点),要么由一个子节点有严格的左右顺序,不能随意颠倒(比如某个节点的左子节点和右子节点交换后,会变成一棵不同的二叉树)。2. 二叉树的基本术语例子:这棵树的深度是,因为最远叶子节点是D,从根A到D的路径包含A、B、D三个节点。3.常见的二叉树类型满二叉树:一棵深度为 k 的二叉树,若所有非叶子节点都有两个子节点,且所有叶子节点都在同一层,则称为满二叉树。

2301_80428740的博客 1163

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数据结构之树

一.树的概念 树是一种非线性结构它是由n个结点组成的一个具有层次结构的集合。它具有以下的特点:1.每个结点有零个或者多个子结点。2.每一个非根结点只有一个父结点。3.没有父结点的结点为根结点。4.除了根结点外,每个结点都可以分为多个不相交的结点。 结点的度:一个结点含有的子树的个数。 叶结点(终端结点):度为0的结点。 分支结点(非终端结点):度不为0的结点。 父结点(双亲结点):若一个结点含有子...

qq_44778236的博客 402

复习—树の习题

摘选了部分客观题,明天考试,砸瓦鲁多! 1.讨论树、森林和二叉树的关系,目的是为了( ) 答案是:借助二叉树上的运算方法去实现对树的一些运算 记住就行… 2.度为二的树就是二叉树。( X ) 二叉树的两个特点: 1.度数不大于二 2.左右子树不能交换 3.完全二叉树一定存在度为1的结点。( X ) 举一个满二叉树的例子… 4.二叉树共有4种基本形态。( X ) 5种形态:空树、只有根结点、根结点+左子树、根结点+右子树、根结点+左右子树 5.霍夫曼树的结点个数不能是偶数。( √ )

FFengJay的博客 3693

二叉树

一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。 https://www.cnblogs.com/webFrontDev/p/3865719.html 树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构;在数据库系统中,可用树来组织信息;在分析算法的行为时,可用树来描述其执...

qq_40774743的博客 266

树与二叉树相关习题

二叉树和树的相关题目和知识

2301_79810534的博客 831

数据结构——堆

堆的性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是 说,如果一个二叉树的层数为K,且结点总数是 ,则它就是满二叉树。 2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对 应时称之为完全二叉树。 要注意的是满

sun_0228的博客 287

堆排序C++ 详解

的顺序存储方式存储在一个一维数组中,并满足ki<=k2i+1且ki<=k2i+2(或满足ki>=k2i+1且ki>=k2i+2),其中i=0,1,2,…那么如何才能将一个任意树调整为堆呢?答案很简单,我们只需要从倒数第一个非叶子结点开始,从后往前,按下标,依次作为根去向下调整即可。如果有一个关键码的集合K={k0,k1,k2,…,kn-1},把它的所有元素按。:每个节点的值大于等于其左右孩子。:每个节点的值小于等于其左右孩子。是根据堆的这种数据结构设计的一种。大根堆/小根堆, 向上调整方法。

qq_37811590的博客 922

c语言pta一维数组,【PTA】【数据结构与算法】堆

判断题1.任何最小堆的前序遍历结果是有序的(从小到大)。 (2分)TF2.任何最小堆中从根结点到任一叶结点路径上的所有结点是有序的(从小到大)。 (2分)TF3.在有N个元素的最大堆中,随机访问任意键值的操作可以在O(logN)时间完成。 (2分)TF4.一棵有124个结点的完全二叉树,其叶结点个数是确定的。 (2分)TF5.完全二叉树中,若一个结点没有左孩子,则它必是树叶。 (1分)TF6.完全...

weixin_39890629的博客 1299

浙江大学计算机考研878真题,2017年浙江大学软件学院878计算机学科专业基础之数据结构考研题库...

一、填空题1. N 个顶点的连通图用邻接矩阵表示时,该矩阵至少有_____个非零元素。【答案】2(N-1)【解析】所谓连通图一定指的是无向图,有向图会称作强连通图。连接N 个顶点,至少需要N-1条边就可 以了。由于无向图的每一条边同时关联了两个顶点。因此用邻接矩阵表示时,该矩阵至少有2(N-1)个非零元素。2. 数据结构是研讨数据的_____和_____以及它们之间的相互关系,并对与这种结构定义相...

weixin_33093437的博客 1560

【数据结构】堆(Heap)

基本概念:1、完全二叉树:若二叉树的深度为h,则除第h层外,其他层的结点全部达到最大值,且第h层的所有结点都集中在左子树。2、满二叉树:满二叉树是一种特殊的的完全二叉树,所有层的结点都是最大值。int size;} heap;

DreamSun的博客 943
上一篇: python图像下采样
下一篇: 多项式链表相加和相乘
letsgoSnaker
博客等级 码龄4年 3粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值