用c语言实现二叉树层序遍历

用c语言实现二叉树层序遍历#include<stdio.h>#include<stdlib.h>#defineN8typedefstructnode{ intdata; structnode*left,*right;}BTNode;BTNode*CreateTree(inta[]){ inti; BTNode*p,*c,*pa,*root; root=(BTNode*)mal…

大家好,又见面了,我是你们的朋友全栈君。#include<stdio.h>

#include<stdlib.h>

#define N 8

typedef struct node{

int data;

struct node *left,*right;

}BTNode;

BTNode *CreateTree(int a[]){

int i;

BTNode *p,*c,*pa,*root;

root=(BTNode *)malloc(sizeof(BTNode));

root->data=a[0];

root->left=root->right=NULL;

for(i=1;i<N;i++){

p=(BTNode *)malloc(sizeof(BTNode));

p->data=a[i];

p->left=p->right=NULL;

c=root;

while(c){

pa=c;

if(c->data>p->data)

c=c->left;

else

c=c->right;

}

if(pa->data>p->data)

pa->left=p;

else

pa->right=p;

}

return root;

}

void print(BTNode *root){

BTNode **Q;

//创建一个容量为N的队列来存储完全二叉树的节点 

Q=(BTNode**)malloc(N*sizeof(BTNode*));

int front,rear;

front=rear=0;

BTNode *c=root;

BTNode *pa;

while(c){

//若有左子女,左子女入队列,若有右子女则右子女入队列

if(c->left)

Q[rear++]=c->left;

if(c->right)

Q[rear++]=c->right;

printf(“%d  “,c->data);

//更新当前根节点

c=Q[front++];

}

}

void Forder(BTNode *root){

if(root){

printf(“%5d”,root->data);

Forder(root->left);

Forder(root->right);

}

}

int main(){

//-100表示不存在的节点 

int a[N]={5,4,6,8,2,9,7,3}; 

BTNode *root;

root=CreateTree(a); 

//栈实现完全二叉树的前序遍历

    print(root);

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143329.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • flask 教程_python flask快速入门与进阶

    flask 教程_python flask快速入门与进阶Flask入门基础教程Flask简介Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合

    2022年8月3日
  • dropdownlist的AutoPostBack属性「建议收藏」

    dropdownlist的AutoPostBack属性「建议收藏」   我最近在做一个教学楼管理系统,老师说最好做成动态网页的形式,反正我也希望自己学习一下有关.net的东西,于是就选择了asp.net,在这之前我学习过mfc,asp所以入门不算太难,甚至在刚刚接触C#的时候还很兴奋,觉得用vc++要写大段代码解决的问题,而用C#几乎一段代码都不用写。所以学习了一周时间我就开始准备动手做教学楼管理系统,在做的过程中遇到了很多的问题,今天上午我准备用母版页的技

    2022年10月16日
  • hoj 2275 Number sequence

    hoj 2275 Number sequence

    2022年1月8日
  • 补码加、减运算规则「建议收藏」

    补码加、减运算规则「建议收藏」在计算机中,通常总是用补码完成算术的加减法运算。其规则是:  [X+Y]补=[X]补+[Y]补,[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补这表明,有了补码表示的被加(减)数和加(减)数,要完成计算补码表示的二数之和或二数之差,只需用二数的补码直接执行加减运算即可,符号位与数值位同等对待,一起参加运算,若运算结果不溢出,即不超出计算机所能表示的范围,则结果的符号…

    2022年4月19日
  • Java算法——判断素数[通俗易懂]

    Java算法——判断素数[通俗易懂]Java算法——判断素数,供自己学习方便和初学者参考! publicstaticbooleanisPrimeNumber(intnumber){if(number<2){returnfalse;}for(i

    2022年7月18日
  • 在手写数字识别的例子中_关于人脸识别的案例

    在手写数字识别的例子中_关于人脸识别的案例1.概念介绍:图像识别(ImageRecognition)是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。 图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。机器学习领域一般将此类识别问题转化为分类问题。手写识别是常见的图像识别任务。计算机通过手写体图片来识别出图片中的字,与印刷字体不同的是,不同人的手写体风…

    2022年9月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号