按层建树(堆排序基础)

简介: 按层建树(堆排序基础)

按层建树是按照给定的数据数组来建立完全二叉树的过程。其中涉及到的基础知识有结构体的创建重命名以及使用、链表的创建和数组遍历。

实现代码如下:

GCC编译通过:

#include <stdio.h>
#include <stdlib.h>
#define N 10
#define MAX 100
typedef struct node{
    int data;
    struct node *left;
    struct node *right;
}BTnode;
BTnode *deal(int a[],int n)
{
    int i;
    BTnode *root;
    BTnode *queue[11];
    int front=0,rear=0;//按层,使用队列 
  for(i=0;i<n;i++){
    /*初始化新节点*/ 
  BTnode *t=(BTnode *)malloc(sizeof(BTnode));
  t->left=t->right=NULL;
  t->data=a[i];
   /*入队*/
   queue[++rear]=t; 
  if(i==0){
    root=t;
  }else{
     if(!queue[rear/2]->left){
        queue[rear/2]->left=t;
     }else{
        queue[rear/2]->right=t;
        front++;
     }  
  }
  }
  return root;  
}
/*按层输出二叉树*/
void PrintTree(BTnode *root)
{
     BTnode *t=NULL;
     BTnode *queue[MAX];
     int front=0,rear=0;
     /*入队*/
     queue[++rear]=root;
     /*出队*/
     while(front!=rear){    
     t=queue[++front]; 
     printf("%d",t->data);
     if(t->left) queue[++rear]=t->left;
     if(t->right) queue[++rear]=t->right;
     }
} 
int main(void)
{
    int a[N]={1,3,5,7,9,2,4,6,8,10};
    BTnode *root=NULL;
    root=deal(a,N);
    PrintTree(root);
    return 0;
}
相关文章
|
6月前
|
存储 机器学习/深度学习 搜索推荐
这可能是你看过最详细的 [八大排序算法]
这可能是你看过最详细的 [八大排序算法]
|
6月前
|
算法 搜索推荐
【算法基础】基础算法(一)--(快速排序、归并排序、二分)
【算法基础】基础算法(一)--(快速排序、归并排序、二分)
|
6月前
|
算法 数据处理 C语言
【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)
【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)
|
6月前
|
搜索推荐 算法
【八大经典排序算法】堆排序
【八大经典排序算法】堆排序
31 0
|
6月前
|
机器学习/深度学习 算法 搜索推荐
【算法训练-排序算法 一】【手撕排序】快速排序、堆排序、归并排序
【算法训练-排序算法 一】【手撕排序】快速排序、堆排序、归并排序
85 0
|
算法 搜索推荐 Windows
【算法分析与设计】递归与分治策略(三)
【算法分析与设计】递归与分治策略
|
机器学习/深度学习 存储 算法
【数据结构与算法篇】手撕八大排序算法之快排的非递归实现及递归版本优化(三路划分)
【数据结构与算法篇】手撕八大排序算法之快排的非递归实现及递归版本优化(三路划分)
210 0
【八大排序(六)】快排终极篇-快速排序非递归版
【八大排序(六)】快排终极篇-快速排序非递归版
|
搜索推荐 算法 Java
基础算法-归并排序
与快速排序的分治不同,快速排序 通过一个分界点,使得小于分界点的数都在分界点左边,大于分界点的数都在分界点右边;而 归并排序 是以整个数组最中心的位置来分
基础算法-归并排序