c语言 将数组转化成二叉树
2021/12/9 今天是我第一次写博客,因为在学习编程的道路上,有大佬博主的指点自己才能一步步排除各种问题,报着感恩的态度,接续他们的意志。其次,想为那些初学者提供一点点的参考。最主要的,顺便加强自己对于知识点的理解。希望我能坚持下去,能够对渴望上进的人助一点力。如果内容存在一些问题欢迎指正。 ——HDU 屠奕生 (aka匡匡)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>int a[21];//数据在21个以内
int DataCount = 0;typedef struct BiNode{int data;struct BiNode *lchild;struct BiNode *rchild;
}*BiTree,BiTNode;BiTree T = NULL;//创建随机数据集
void create_data(int MaxData){int i,j;srand(time(NULL));for(i=0;i<DataCount;i++){a[i] = rand()%MaxData;for(j=0;j<i;j++){if(a[j]==a[i]){a[i] = rand()%MaxData;j=-1;}}}
}// 创建一棵二叉树
void create(BiTree Troot,int cnt){BiTree Nodep;if(cnt==DataCount){return ;}Nodep = (BiTree)malloc(sizeof(BiTNode));Nodep->data = a[cnt];Nodep->lchild = NULL;Nodep->rchild = NULL;if(Troot == NULL){T = Nodep;create(T,++cnt);}else if(Nodep->data<=Troot->data){if(Troot->lchild==NULL){Troot->lchild = Nodep;create(T,++cnt);}else{create(Troot->lchild,cnt);}}else if(Nodep->data>Troot->data){if(Troot->rchild == NULL){Troot->rchild = Nodep;create(T,++cnt);}else{create(Troot->rchild);}}
}//中序遍历
void inOrder(BiTree T){if(T){ inOrder(T->lchild);printf("%d ",T->data);inOrder(T->rchild);}
}int main(){int i;int MaxData;printf("DataCount:");scanf("%d",&DataCount);printf("MaxData:");scanf("%d",&MaxData);create_data(MaxData);printf("原始数据:");for(i=0;i<DataCount;i++){printf("%d ",a[i]);}printf("\n");create(T,0);inOrder(T);return 0;
}
首先,能搜索到这篇博文的应该都了解二叉树的定义,在此就不多加赘述了。建立二叉树,首先得有一个结构体变量存储数据和左孩子及右孩子的地址。
typedef struct BiNode{
int data;
struct BiNode *lchild;
struct BiNode *rchild;
}*BiTree,BiTNode; //自己定义的数据类型,BiTree是指针,BiTNode是该数据结构类型。
之后,我们要生成一个含有n个元素的不相等的数组。
//创建随机数据集
void create_data(int MaxData,int arr[],int DataCount){
int i,j;
srand(time(NULL)); //随机种子
for(i=0;i<DataCount;i++){
arr[i] = rand()%MaxData; arr[i] -> (0,MaxData)
for(j=0;j<i;j++){
if(arr[j]==arr[i]){
arr[i] = rand()%MaxData;
j=-1;
}
}
}
}
有了初始的数组,我们就可以建立二叉树了。
// 创建一棵二叉树
void create(BiTree Troot,int cnt){ //不要返回为二叉树的指针会出问题。
BiTree Nodep;
if(cnt==DataCount){
return ;
}
Nodep = (BiTree)malloc(sizeof(BiTNode));
Nodep->data = a[cnt];
Nodep->lchild = NULL;
Nodep->rchild = NULL;
if(Troot == NULL){
T = Nodep; //初始化
create(T,++cnt);
}
else if(Nodep->data<=Troot->data){
if(Troot->lchild==NULL){
Troot->lchild = Nodep;
create(T,++cnt);
}
else{
create(Troot->lchild,cnt);
}
}
else if(Nodep->data>Troot->data){
if(Troot->rchild == NULL){
Troot->rchild = Nodep;
create(T,++cnt);
}
else{
create(Troot->rchild,cnt);
}
}
}
最后我们中序遍历输出一下结果。
//中序遍历
void inOrder(BiTree T){
if(T){
inOrder(T->lchild);
printf("%d ",T->data);
inOrder(T->rchild);
}
}
c语言 将数组转化成二叉树相关推荐
- c语言字节数组转化成字符串,C语言 字节数组转为字符串
本文章适用场景: #include int main(void) { printf("\tmain enter \n"); char* test1[128] = {0x11,0x2 ...
- 把字节数组转化成字符串的方法 String (byte[] bytes);String(byte[] bytes, int offset, int length);字符串数组转化成字符串
字符串数组转化成字符串 String(char[] chars)/String(char[] chars, int offset, int length)类似于字节数组转化成字符串. String ( ...
- 将数组转化成字符串的两种方法
将数组转化成字符串的两种方法 let arr = [1,2,8,9,'西瓜']; console.log(arr.toString());//将数组转化为字符串 console.log(arr.toS ...
- php key数组转字符串,学习猿地-php怎么将数组转化成字符串
php将数组转化成字符串的方法:首先创建一个PHP示例文件:然后定义一个数组数据为"$arr":接着通过"implode($arr);"方法将该数组转化成字符串 ...
- php中数组转字符串,php怎么将数组转化成字符串
php将数组转化成字符串的方法:首先创建一个PHP示例文件:然后定义一个数组数据为"$arr":接着通过"implode($arr);"方法将该数组转化成字符串 ...
- php将一个数组转成字符串,php怎样将数组转化成字符串
php将数组转化成字符串的方法:可以利用内置函数implode()来进行转化.implode()函数可以返回一个由数组元素组成的字符串,例如:[implode(",", $arra ...
- c语言byte数组转化为字符串,数组转字符串
2019-05-07 [属猪的今年多大]属猪八戒的歇后语 属猪八戒的歇后语答案-- 好吃懒做歇后语 2018-11-06 属猪的今年多大_属猪八戒的歇后语 属猪八戒的歇后语答案-- 好吃懒做歇后语 2 ...
- 把一个字符串数组转化成数字数组
今天遇到了一个小问题,项目中一个功能是按特定数字键,进入到酒店模式. 但是发现拿到的按键键值是字符串的,我们判断的时候需要拿数字判断,导致二者永远判断不等. if (this.numVec[0].ke ...
- c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组
遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...
- iOS 数组转化成字符串
数组转化为字符串 NSString *ruleStr; ruleStr = [self.ruleArray componentsJoinedByString:@""];
最新文章
- 啥都不如烂笔头,约翰霍普金斯大学新研究:学外语还得用手写
- 灰度图片维度与彩色图片维度-python-scikit-image包
- 关于《用C#编写ActiveX控件》的几点说明
- Amazon Glacier的Scala客户端
- Jquery——hover与toggle
- ORACLE数据库表空间查询
- PHP异步调用实现方式
- Yii2学习笔记(一):Yii的安装和使用(base版)
- Altium Designer(AD)18安装
- 华为盒子 原生android,华为悦盒/各种安卓盒子找回原生设置以及适配蓝牙遥控器...
- JavaCV调用摄像头
- 辅音字母组合功能音中的浊化现象
- Android游戏开发是视频教程
- 《开天辟地》之《网上冲浪篇》将带你进入一个精彩的互联网世界
- mysql数据库读取数据,教你如何从 MySQL 数据库读取数据
- Vue项目关于省略号显示
- 10杯水只有一滴有毒,用四只老鼠测试,二进制的方法快速找出哪瓶有毒;
- 记录一下自己爬虎牙LOL主播的爬虫思路
- 机器人定位传感器之激光雷达
- Single-Stage 6D Object Pose Estimation——6D姿态估计