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

(3) 2024-05-20 12:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说用c语言实现二叉树层序遍历,希望能够帮助你!!!。
#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);

}

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复