二叉树用顺序表实现 C++代码实现

二叉树的顺序存储结构的C++实现 本以为二叉树的顺序存储结构实现非常简单,类似于线性表,而在实际操作当中遇到了一些小问题,首先是如何判别树节点是否为空,我采用的方法初始化数组值为-111,新插入的节点覆盖初始值,而没有覆盖初始值的则认为是空节点。对于节点i,其左儿子节点为2*i,右儿子节点为2*i+1,掌握了这个规律,二叉树的前中后序遍历就不难实现了,本文只以前序遍历进行间接。Print函数是根据数组的顺序打印元素的,对于空节点选 阅读详情
/*二叉树用顺序表实现*/

#include <iostream>
using namespace std;

/*完全二叉树顺序表的定义*/
#define MAX_BITREE_SIZE 100
typedef int SqBiTree[MAX_BITREE_SIZE];

/*创建一个二叉树顺序表*/
void CreateBiTree(SqBiTree &T)
{
    int i;
    cout<<"输入元素个数:";
    cin>>T[0];


    //cout<<T[0];
    for(i=1;i<=T[0];i++)
        cin>>T[i];
}

/*先序非递归遍历*/
void PreOrderBiTree(SqBiTree &T)
{
    int n;
    int i;
    int j;
    n=T[0];

    for(i=1;i<=n;i++)
    {
       if(i==1)
           j=1;
       else if(2*j<=n)
           j=2*j;
       else if(j%2==0&&j<n)
           j=j+1;
       else if(j>1)
       {
           while(j%2!=0||j==n)
               j=j/2;
           j=j+1;
       }//这里是难点,也是关键。
       cout<<T[j]<<" ";
    }
    cout<<endl<<endl;
}

/*后续非递归遍历*/
void PostOrderBiTree(SqBiTree &T)
{
    int i,n,j=1;
    n=T[0];

    for(i=1;i<=n;i++)
    {
        if(i==1)
            while(2*j<=n)
                j=2*j;
        else if(j%2==0&&j<n)
        {
            j=j+1;
            while(2*j<=n)
                j=2*j;
        }
        else if(j>1)
            j=j/2;
        cout<<T[j]<<" ";
    }
    cout<<endl;
}

void main()
{
       SqBiTree T;
       CreateBiTree(T);
       PreOrderBiTree(T);
       PostOrderBiTree(T);
}

书上写的程序代码有些地方是错的,幸亏我多测试了几组数据,找出来了这个错误,但刚开始时,实在不知道这个错误应该怎么去改,因此信心一度受到打击,且放下这个代码好几天,没有理它,今天下午又把它拿出来,静下心来,测试了几组数据,认真的观察了一下规律,就被我给写出来了,呵呵,真是高兴啊,解决了遗留下来的问题。

二叉树的顺序表,一般很少用,只有用到完全二叉树时,才能发挥它的优势,所以,学习二叉树的顺序表还是有一定用处的!

 

【数据结构系列】严蔚敏C语言版算法实现并附带详细注释(逐步更新) 数据结构在编程过程中是不可或缺的,是举足轻重的,想要编写出一个好的程序,学好数据结构这门学科是必经之路。本文是各种数据结构实现的目录文章,我会在我学习数据结构这门课程的过程中逐步更新其中的内容。................................. 阅读详情

相关推荐

数据结构C语言版_二叉树的顺序存储表示和实现

二叉树的顺序存储表示和实现、自己写的、觉得应该有用吧、、

完全二叉树的顺序储存结构(C++完整代码)

完全二叉树的定义:有一颗深度为h、具有n个节点的二叉树,若将它与一颗同深度的满二叉树中的所有节点按从上到下,从左到右的顺序分别进行编号,且该二叉树中的每个节点分别于满二叉树中的编号为1~n ...

qq_52284035的博客 8834

数据结构常见题型(链表,顺序表,树,图)

次涵盖了数据结构 顺序表 单链表 二叉树 图中重要题型,对于学习很有用

数据结构与算法--二叉排序树(C++实现)

二叉树也是常用的数据结构。一棵二叉树由根节点(可以为空)和左右子树(也是二叉树)构成。通常情况下,二叉树的效率比线性链表高,因为二叉树上的查询、插入等操作即相当于二分法操作。本文用C++实现二叉树的算法,是C++、数据结构及算法学习的一个小练习。供大家参考。

DeeperBlue的博客 1万+

HALCON基于描述符的模板匹配(未标定)

HALCON基于不标定描述符的模板匹配

king_linj的博客 891

C++时间复杂度分析

如果想要知道一个程序运行需要花费多少时间,直接运行测试不是更简单更准确吗?何必去花精力推算复杂度!首先,这个想法没问题,确实可以直接跑出来,但这属于马后炮,无法提前预估算法的时间复杂度,而且也非常受限:1、测试结果在不同处理器上运行的结果会有很大波动2、即使在同一环境下运行,不同数据也会导致结果有很大波动所以需要一个不用具体测试就能评估程序执行效率的方法,也就是时间、空间复杂度分析方法。

hls0611的博客 3840

数据结构之用顺序表实现二叉树

纯c语言实现二叉树

wtt561111的专栏 3451

别再硬啃C代码了!用Simulink的Matlab Function模块手把手教你搭建CRC8校验模型(附完整M脚本)

本文详细介绍了如何利用Simulink的Matlab Function模块轻松实现CRC8校验模型,替代传统的C代码编写。通过可视化建模和即时验证,开发者可以高效完成算法设计,并自动生成嵌入式代码。文章包含完整的M脚本示例和工程实践技巧,特别适合嵌入式系统开发人员提升工作效率。

weixin_42520661的博客 183

日撸 Java 三百行(24 天: 利用顺序表建立二叉树)

这里是JAVA自学与了解的同步笔记与记录,如有问题欢迎指正说明

ALBlack的博客 1077

DMR对讲机的基本概念理解

刚刚入手DMR对讲机,尚未成功联通。国内互联网上能找到的资料很少,大多数也都是一些DMR协议介绍之类的玩意,对实际操作没有指导意义。以下全部是这几天在网上研究各种资料得出的个人思考,如有错误请斧正。 相比与模拟通讯系统,DMR将语音信号转换为包的形式进行收发。将DMR对比成TCP/IP系统会更容易理解。 一般DMR对讲机都支持模数双通,说明DMR应该使用了跟FM同样的无线AP组件,只在解码上有区别。对讲机先使用DMR进行数字解码,解码成功则说明是数字信号,不成功则使用模拟方式再次进行解码。可以对等理解为

1万+

锁的艺术:Java并发中的常用锁策略与实践

对java锁相关内容进行整理分析:乐观锁 VS 悲观锁+自旋锁 VS 适应性自旋锁+无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁+公平锁 VS 非公平锁+可重入锁 VS 非可重入锁+独享锁 VS 共享锁

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 171万+

DS007-二叉树-顺序表表示法-先根-中根-后根遍历

本篇介绍二叉树的顺序表表示法,及其先、中、后根遍历。 以下面这棵二叉树为例。 对应的顺序存储结构为: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ..

一匹刚学打乒乓球的老马 1199

【ROS2】从yaml文件中读取参数配置

ROS2:从yaml中读取参数,到节点;使用C++演示参数的增、删、改、查、遍历、监听变化

郭老二 1284

[数据结构]:11-冒泡排序(顺序表指针实现形式)(C语言实现)

此专栏包含408考研数据结构全部内容,除其中使用到C++引用外,全为C语言代码。使用C++引用主要是为了简化指针的使用,避免二重指针的出现。

Chandni_小月月 1567

3步!Spring Boot+OCR引擎秒提身份证/营业执照?手把手教你从零实现!

OCR技术革新文档识别效率 本文演示了如何利用Spring Boot+Tesseract OCR+OpenCV构建自动化文档识别系统。相比传统人工录入,OCR技术可实现: 5秒极速提取身份证/营业执照关键信息 精准识别中文文本(准确率90%+) 正则过滤自动匹配结构化数据 技术要点: OpenCV图像预处理(灰度化+二值化) Tesseract多语言OCR识别 正则表达式精准提取证件号码 效率提升达100倍,错误率降低90%,适用于金融、政务等需要批量处理证件的场景。

java专栏 905

10、使用Ray Serve实现微服务与模型部署

本文深入介绍了如何使用Ray Serve实现微服务与机器学习模型的高效部署。从基础的部署定义到复杂的模型服务场景,涵盖部署架构、HTTP与Python调用、资源配置、FastAPI集成、金丝雀发布策略及实际应用流程。文章还探讨了模型服务的关键需求如灵活性、批处理、硬件优化和可扩展性,并展示了Ray Serve如何满足这些要求。最后提供了常见问题解决方案与未来发展方向,帮助开发者构建高性能、易维护的模型服务平台。

blue42的博客 176

数据结构复习

文章目录顺序表(待更新) 顺序表(待更新) #include<iostream> using namespace std; #define MaxSize 50 #define ElemType int #define InitSize 10 typedef struct { ElemType data[MaxSize]; int length; }sqList;//线性表的顺序实现 //动态分配数组 L.data= new ElemType[InitSize]; typede

a_fan_of_faith的博客 539

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

二叉树的深度/广度遍历

/* 二叉树的相关实现 ------顺序表存储 二叉树的性质 1:二叉树k层含有的节点数为 2^k-1 (k从一开始计数) 2:为k层的二叉树最多含有的节点数是 2^(k-1) (k从一开始计数) 3:对于任意的二叉树而言 都有n0 = n2+1 (n0表示出度为为0的节点,n2表示出度为2的节点) 证明: 求二叉树的总的节点数 ...

qq_42211587的博客 188

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据结构严蔚敏全部代码(正在更新中)(详细到书中每一个ADT及算法段以及入门演示代码 COVER BY:数据结构算法实现及解析 (修改版可直接运行文件)(更新于2020.11.10))

代码目录第一章 绪论三元组的实现c1.h 万能头文件c1-1.hbo1-1.cppmain1-1.cpp区分引用类型和非引用类型(注:必须保存为c++后缀即:.cpp)algo1-3.cppexit的作用algo1-4.cpp记录程序运行时间第二章 线性表第三章 栈和队列第四章 串第五章 数组和广义表第六章 树和二叉树第七章 图第八章 动态存储管理第九章 查找第十章 内部排序第十一章 外部排序第十二章 文件 第一章 绪论 三元组的实现 c1.h 万能头文件 #include<string.h>

qq_38977714的博客 1572

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

数据结构代码题汇总

#include <stdio.h> #include <stdlib.h> //Day01 //在带头结点的单链表 L 中,删除所有值为 x 的结点,并释放其空间,假设值为 x 的结点不唯一 //编写算法以实现上述操作 void Del_x(LinkList &L,ElemType x){ LNode *p = L->next,*pre = L,*q; while(p != NULL){ if(p->data == x){

m0_75063536的博客 934

C++几种常见的数据结构,顺序表 链表 栈 队列 二叉树 哈希表

C++几种常见的数据结构。

qq_45179361的博客 569

2020年春安工程网课数据结构代码笔记

顺序表代码c实现: #include<stdio.h> #include<Windows.h> #define LIST_INIT_SIZE 5 #define LIST_ADD_SIZE 1 typedef int ElemType;// 顺序表内容元素的类型,这么写完全是为了好维护 typedef struct { ElemType *elem; int len...

weixin_44414413的博客 300

[数据结构]:16-归并排序(顺序表指针实现形式)(C语言实现)

此专栏包含408考研数据结构全部内容,除其中使用到C++引用外,全为C语言代码。使用C++引用主要是为了简化指针的使用,避免二重指针的出现。

Chandni_小月月 842

C++ 算法模板

C++ 算法模板 文章目录C++ 算法模板1 数据结构1.1 线性结构1.1.1 顺序表1.2 图状结构1.2.1 二维数组1.2.2 二叉树1.2.3 邻接表2 数论类2.1最小公倍数2.2 最大公约数2.3 快速幂2.4 求素数2.5 小费马定理(分数取模)3 字符串类3.1 模式匹配4.图论类4.1 最短路径4.1.1 Dijkstra4.1.2 Floyd4.1.3 SPFA4.2 拓扑排序4.2.1 Kahn算法4.2.2 DFS4.3 树相关4.3.1 求树中结点个数(dfs)5. 高精度计算6

The_Only_God的博客 1655

关于我的数据结构——初阶第一篇

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构主要分为逻辑结构和物理结构。逻辑结构反映数据元素之间的逻辑关系,如集合、线性结构、树形结构、图形结构等。物理结构则是数据结构在计算机中的存储形式,包括顺序存储结构和链式存储结构。

ChaoZiLL的博客 1062

王道数据结构与算法代码(与书本伪代码统一)有思维导图逐句注解 持续更新

本文以王道23版本数据结构与算法书本伪代码为基础进行编写 内容仅供参考,配有个人编写代码辅助思维导图,有部分地方为个人理解,如果发现理解有偏差或者有误欢迎评论区指正,谢谢大家。 ...

个人博客地址https://sun98k.github.io/ 3931
上一篇: 哈夫曼树及哈夫曼编码 C++代码实现
下一篇: 二叉树的链式存储结构 C++代码实现
hackerain
博客等级 码龄16年 753粉丝 220原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值