arkadaşlar merhaba.Kodumda ağaca ekleme,silme,inorder sıralama,yükseklik bulma,full binary olup olmadığını bulma işlemlerini yaptım ama çalışmıyot inorderda sonsuz döngüye giriyor bakarsanız çok sevinirim.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct node{
int data;
struct node *left;
struct node *right;
};
struct node *root = NULL;
struct node *newN(int value){
struct node* temp=( struct node*)malloc(sizeof(struct node));
temp-> data= value;
temp->left=NULL;
temp->right=NULL;
if(root==NULL)
{
root =temp;
return temp;
}
};
void inorder(struct node *root)
{
if(root!=NULL)
{
inorder(root->left);
printf("%d",root->data);
inorder(root->right);
}
}
struct node* ekle(struct node* node,int value){
if(node==NULL)
return newN (value);
if(value < node->data)
node->left = ekle(node->left,value);
else if(value > node->data)
node->right = ekle(node->right,value);
return node;
};
int height (struct node *node){
if (node==NULL){
return 0;
}
else{
int lheight,rheight;
lheight=height(node->left);
rheight=height(node->right);
if(rheight>lheight)
return rheight+1;
else
return lheight+1;
}
}
int max(struct node* node){
while(node->right!=NULL)
node=node->right;
return node->data;
}
int min(struct node* node){
while(node->left!=NULL)
node=node->left;
return node->data;
}
struct node* sil(struct node* node,int x)
{
if(node==NULL)
return NULL;
if(node->data==x) { //deger bulundu
if(node->left==NULL && node->right==NULL) //bulunan degerin sag ve solu NULL
return NULL;
if(node->right!=NULL){ // deger bulundu ve sag tarafı NULL degil
node->data=min(node->right); //sagdaki en küçük değeri al
node->right=sil(node->right,min(node->right));
return node;
}
node->data=max(node->left); // deger bulundu ve sol taraf NULL degil
node->left=sil(node->left,max(node->left)); //soldaki en büyük degeri al
return node;
}
if(node->data<x) //Deger henüz bulunmadı, x degeri küçükse sol ağacta ara
{
node->right=sil(node->right,x);
return node;
}
node->left=sil(node->left,x); //deger henüz bulunmadı, x degeri büyükse sağ agacta ara
return node;
}
bool isFullBinaryTree(struct node *node) {
if (node == NULL)
return true;
// Checking the presence of children
if (node->left == NULL && node->right == NULL)
return true;
if ((node->left) && (node->right))
return (isFullBinaryTree(node->left) && isFullBinaryTree(node->right));
return false;
}
int main()
{
int secim;
while(1==1)
{
printf("\n1 Sayi Ekle");
printf("\n2 Sayi Sil");
printf("\n3 Inorder Siralama");
printf("\n4 Agacin Yuksekligini Bulma");
printf("\n5Full Binary Mi");
printf("\n6 Complete Binary Mi");
printf("\nsecim yapiniz:");
scanf("%d",&secim);
switch(secim)
{
case 1 :
printf("Sayiyi Giriniz");
scanf("%d",&secim);
ekle(root,secim);
break;
case 2:
printf("\n Silinecek Sayıyı Giriniz" );
scanf("%d",&secim);
sil(root,secim);
break;
case 3:
inorder(root);
break;
case 4:
height(root);
break;
case 5:
isFullBinaryTree(root);
break;
}
}
}