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语言 将数组转化成二叉树相关推荐

  1. c语言字节数组转化成字符串,C语言 字节数组转为字符串

    本文章适用场景: #include int main(void) { printf("\tmain enter \n"); char* test1[128] = {0x11,0x2 ...

  2. 把字节数组转化成字符串的方法 String (byte[] bytes);String(byte[] bytes, int offset, int length);字符串数组转化成字符串

    字符串数组转化成字符串 String(char[] chars)/String(char[] chars, int offset, int length)类似于字节数组转化成字符串. String ( ...

  3. 将数组转化成字符串的两种方法

    将数组转化成字符串的两种方法 let arr = [1,2,8,9,'西瓜']; console.log(arr.toString());//将数组转化为字符串 console.log(arr.toS ...

  4. php key数组转字符串,学习猿地-php怎么将数组转化成字符串

    php将数组转化成字符串的方法:首先创建一个PHP示例文件:然后定义一个数组数据为"$arr":接着通过"implode($arr);"方法将该数组转化成字符串 ...

  5. php中数组转字符串,php怎么将数组转化成字符串

    php将数组转化成字符串的方法:首先创建一个PHP示例文件:然后定义一个数组数据为"$arr":接着通过"implode($arr);"方法将该数组转化成字符串 ...

  6. php将一个数组转成字符串,php怎样将数组转化成字符串

    php将数组转化成字符串的方法:可以利用内置函数implode()来进行转化.implode()函数可以返回一个由数组元素组成的字符串,例如:[implode(",", $arra ...

  7. c语言byte数组转化为字符串,数组转字符串

    2019-05-07 [属猪的今年多大]属猪八戒的歇后语 属猪八戒的歇后语答案-- 好吃懒做歇后语 2018-11-06 属猪的今年多大_属猪八戒的歇后语 属猪八戒的歇后语答案-- 好吃懒做歇后语 2 ...

  8. 把一个字符串数组转化成数字数组

    今天遇到了一个小问题,项目中一个功能是按特定数字键,进入到酒店模式. 但是发现拿到的按键键值是字符串的,我们判断的时候需要拿数字判断,导致二者永远判断不等. if (this.numVec[0].ke ...

  9. c语言一维数组转化为二维矩阵,js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  10. iOS 数组转化成字符串

    数组转化为字符串 NSString *ruleStr; ruleStr = [self.ruleArray componentsJoinedByString:@""];

最新文章

  1. 啥都不如烂笔头,约翰霍普金斯大学新研究:学外语还得用手写
  2. 灰度图片维度与彩色图片维度-python-scikit-image包
  3. 关于《用C#编写ActiveX控件》的几点说明
  4. Amazon Glacier的Scala客户端
  5. Jquery——hover与toggle
  6. ORACLE数据库表空间查询
  7. PHP异步调用实现方式
  8. Yii2学习笔记(一):Yii的安装和使用(base版)
  9. Altium Designer(AD)18安装
  10. 华为盒子 原生android,华为悦盒/各种安卓盒子找回原生设置以及适配蓝牙遥控器...
  11. JavaCV调用摄像头
  12. 辅音字母组合功能音中的浊化现象
  13. Android游戏开发是视频教程
  14. 《开天辟地》之《网上冲浪篇》将带你进入一个精彩的互联网世界
  15. mysql数据库读取数据,教你如何从 MySQL 数据库读取数据
  16. Vue项目关于省略号显示
  17. 10杯水只有一滴有毒,用四只老鼠测试,二进制的方法快速找出哪瓶有毒;
  18. 记录一下自己爬虎牙LOL主播的爬虫思路
  19. 机器人定位传感器之激光雷达
  20. Single-Stage 6D Object Pose Estimation——6D姿态估计

热门文章

  1. Roaring Bitmap 原理及实践
  2. P2184 贪婪大陆(树状数组)
  3. actived生命周期_vue组件的生命周期和执行过程
  4. 基于python语言设计的词云定制器
  5. bzoj 2827: 千山鸟飞绝
  6. javascript-异步之Promise then和catch
  7. 程序员表白技巧:程序员木讷? 我反手就是一串代码
  8. php 姓氏表,php 根据姓氏笔画排序怎么做
  9. 小武与tfpyth的碰撞----torch.autograd.Function进阶版本
  10. 《风暴英雄》游戏体验