广义表的建立与基本操作 c++_二叉树-顺序表建立完全二叉树(C++)

e26bf2ffa030d9ff3582dd7710dfd014.png

这篇文章来分享一个新算法——通过顺序表建立二叉树,此算法不复杂,想通很有意思喔~

It's show time!

Punchline-------------------------------------------------------------------

Task:用顺序表按层次存储完全二叉树的结点值,通过该顺序表存储结构建立完全二叉树。

Input:用户输入一行,空格隔开,整个输入以$结束。

Output:输出完全二叉树的广义表达式。

Realize:

  1. 创建完全二叉树(CreateTree):叨叨Chen用的递归算法,算法思路如下:
  • 如果结点在顺序表中的位置loc>=len(顺序表的长度),则将该结点设置为NULL,并返回;
  • if loc<len:说明上一个结点有孩子;
  • loc如何定位?根据完全二叉树的特征可以知道,如果父结点序号为i,那么其左孩子为2*i,右孩子为2*i+1,但是注意你在C++中使用的下标,左右loc会进行调整,例如叨叨Chen这里使用的是0为起始,对于父结点0,其左孩子为1,右孩子为2,因此父结点为i,那么左孩子loc为2*i+1,右孩子loc为2*(i+1);

2.输出二叉树的广义表形式(print):结合程序理解会更好。

------------------------------------------------------------------------------

Let's get it!

//加载头文件;

#include

//定义完全二叉树结点结构体;typedef是为了兼容C语言;

typedef 

//主要实现功能函数;

//创建完全二叉树

//main函数

int 

读者可以观察到这里的main函数叨叨Chen没有用之前一些文章里的cin.getline()/cin.get()命令,相信读者也看到Input要求用户用空格隔开,那么我们为了避免将空格作为字符被传入数组,因此选取了cin。

以上叨叨Chen想和大家分享的用顺序表建立完全二叉树的算法,欢迎读者们提出批评和建议,叨叨Chen会采纳好的建议追加在文章后。下篇文章再见咯!

2020.10.08------------------------------------------------------------------It still comes---


叨叨Chen在复盘算法的时候,发现这篇算法中的一个地方可以小小改动一下。CreateTree(...)这个函数本来需要传递4个参数,这里可以改动一个地方使得main函数调用CreateTree的时候只需要传递3个参数。改动如下:

原来的CreateTree函数如下所示:

void 

修改后:

void 

main函数调用变为:

int 

哈哈,修改完毕,读者可以发现叨叨Chen只是在原本的CreateTree函数的参数上作了小手脚,就是将形参int loc改为默认参数int loc=0(os:C++上的小小知识点)。这样去除冗余参数,读者在读main函数的时候,更能明白各个参数代表的含义。

叨叨Chen今天就写在这里啦,之后复盘算法有新收获的话,还会更新的喔~

2020.10.11-----------------------------------------------------------------It still comes---

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值