Я новичок в программировании C и изучаю в нем структуры данных. Недавно я столкнулся с обходом порядка уровней в двоичном дереве поиска, и я написал код, и я не могу понять, почему мой код не работает. Не стесняйтесь обращаться к любым предложениям. Код, который я написал, ничего не печатает после levelOrder () называется int the main. Я ожидаю распечатать дерево, но он ничего не печатает, и процесс завершается. Я попытался создать очередь с массивом и поместить адреса моих узлов дерева в указатель на массив структурных узлов. Мой код : -
#include <stdio.h>
#include <stdlib.h>
#include "Queue_fortree.h"
struct node{
int data;
struct node *left;
struct node *right;
};
struct node *Insert(struct node *a,int b);
int Search(struct node *d,int s);
int findmax(struct node *c);
int findmin(struct node *b);
struct node *getnode(int c);
int recfindmin(struct node *j); //recursive method(rec).
int recfindmax(struct node *h);
int maxv(int a,int b);
int findheight(struct node *g);
void levelOrder(struct node *t);
int main(){
struct node *root;
root=NULL;
int front=-1 ;
int rear=-1;
int v;
root=Insert(root,66);
root=Insert(root,22);
root=Insert(root,18);
root=Insert(root,65);
root=Insert(root,60);
root=Insert(root,2);
root=Insert(root,13);
root=Insert(root,65);
printf("\n max value is %d rec %d\n",findmax(root),recfindmax(root));
printf("\n min value is %d rec %d\n",findmin(root),recfindmin(root));
printf("enter the no to be searched");
scanf("%d",&v);
if(Search(root,v)){
printf("found");
}else {
printf("not found");
}
printf("\nheight is %d",findheight(root));
printf("\n");
levelOrder(root);
}
struct node *getnode(int c){
struct node *new=(struct node*)malloc(sizeof(struct node));
new->data=c;
new->left=new->right=NULL;
return new;
}
int Search(struct node *d,int s){
if(d==NULL){
return 0;
}
else if(d->data==s){
return 1;
}
else if(s<=d->data){
return Search(d->left,s);
}
else{
return Search(d->right,s);
}
}
struct node *Insert(struct node *a,int b){
if (a==NULL){
a=getnode(b);
}
else if(b<=a->data){
a->left=Insert(a->left,b);
}
else{
a->right=Insert(a->right,b);
}
return a;
}
int findmin(struct node *b){
if(b==NULL){
printf("tree is empty");
return -1;
}
while(b->left!=NULL){
b=b->left;
}
return b->data;
}
int findmax(struct node *c){
if(c==NULL){
printf("tree is empty");
return -1;
}
while(c->right!=NULL){
c=c->right;
}
return c->data;
}
int recfindmin(struct node *j){
if(j==NULL){
printf("tree is empty");
return -1;
}
else if(j->left==NULL){
return j->data;
}
return recfindmin(j->left);
}
int recfindmax(struct node *h){
if(h==NULL){
printf("tree is empty");
return -1;
}
else if(h->right==NULL){
return h->data;
}
return recfindmin(h->right);
}
int findheight(struct node *g){
if(g==NULL){
return -1;
}
return maxv(findheight(g->left),findheight(g->right))+1;
}
int maxv(int a,int b){
if(b>a){
return b;
}else if(a>b)
{
return a;
}
else if(a==b){
return a;
}
}
void levelOrder(struct node *t){
if(t==NULL){
printf("empty");
return;
}
enqueue(t);
while(!isempty()){
struct node *current=dequeue();
printf(" %d ",current->data);
if(current->left!=NULL){
enqueue(current->left);
}
if(current->right!=NULL){
enqueue(current->right);
}
}
printf("hey");
}
и в моем заголовочном файле это
#ifndef queyeu
#define queyeu
#define max 40
struct node *A[max];
int rear;
int front;
int isempty(){
return (front==-1 && rear==-1)?1:0;
}
int isfull(){
return ((rear+1)%max==front)?1:0;
}
void enqueue(struct node *a){
if(isfull()){
printf("queue full");
return;
}
if(isempty()){
front=rear=0;
}
else{
rear=(rear+1)%max;
}
A[rear]=a;
}
struct node *dequeue(){
struct node *b;
b=A[front];
if(isempty()){
printf("the queue is empty");
}
else if(front==rear){
front=rear=-1;
}else {
front=(front+1) %max;
}
return b;
}
struct node *fron(){
return A[front];
}
#endif