درخواست بررسی سورس این دو برنامه

shahinshyd

Member
با سلام
ما اینجا دو تا برنامه داریم که مربوط به مبحث ساختمان داده هست

attachment.php

1-برنامه ای که فرم پرانتزی یک درخت دودویی را به صورت رشته از ورودی خوانده وان را به فرم لیست پیوندی در حافظه پیاده سازی کرده و پیمایش های مختلف ان را چاپ میکند.

کد:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct Node{
    int value;
    Node*left;
    Node*right;
};
int inorder(Node*node1,Node*node2){
    int x=1;
    if(node1->left&&node2->left)
        x=x&inorder(node1->left,node2->left);
    else
        if(node1->left != node2->left)
            x=0;
    else
    x=x&(node1->value==node2->value);
    if(node1->right&&node2->right)
        x=x&inorder(node1->right,node2->right);
    else
        if(node1->right != node2->right)
            x=0;
    return x;
}
int postorder(Node*node1,Node*node2){
    int x=1;
    if(node1->left&&node2->left)
        x=x&&inorder(node1->left,node2->left);
    else
        if(node1->left != node2->left)
            x=0;
    if(node1->right&&node2->right)
        x=x&&inorder(node1->right,node2->right);
    else
        if(node1->right != node2->right)
            x=0;
    x=x&&(node1->value==node2->value);
    return x;
}
int preorder(Node*node1,Node*node2){
    int x=1;
    x=x&(node1->value==node2->value);
    if(node1->left&&node2->left)
        x=x&inorder(node1->left,node2->left);
    else
        if(node1->left != node2->left)
            x=0;
    if(node1->right&&node2->right)
        x=x&inorder(node1->right,node2->right);
    else
        if(node1->right != node2->right)
            x=0;
    return x;
}
void Insert(int n,int x,Node*root){
    Node*temp=root;
    int right=0;
    for(int h=1;h!=n && temp;){
        for(int j=n;j/2>h;j/=2);
        if(j==h*2){
            if(temp->left)
                temp=temp->left;
            right=0;
        }
        if(j==h*2+1){
            if(temp->right)
                temp=temp->right;
            right=1;
        }
        h=j;
    }
    Node*t=(Node*)malloc(sizeof(Node));
    t->value=x;
    t->left=NULL;
    t->right=NULL;
    if(right)
        temp->right=t;
    else
        temp->left=t;
}

int main(){
    clrscr();
    int n,x;
    Node*root1=NULL,*root2=NULL;
    printf("First tree elements ... \n");
    for(;;){
        printf("Please Enter a Number for element Place : ");
        scanf("%d",&n);
        if(n==0)
            break;
        printf("Please Enter a Number : ");
        scanf("%d",&x);
        if(!root1){
            Node*temp=(Node*)malloc(sizeof(Node));
            temp->value=x;
            temp->left=NULL;
            temp->right=NULL;
            root1=temp;
        }else
            Insert(n,x,root1);
    }
    printf("\nSecond tree elements ... \n");
    for(;;){
        printf("Please Enter a Number for element Place : ");
        scanf("%d",&n);
        if(n==0)
            break;
        printf("Please Enter a Number : ");
        scanf("%d",&x);
        if(!root2){
            Node*temp=(Node*)malloc(sizeof(Node));
            temp->value=x;
            temp->left=NULL;
            temp->right=NULL;
            root2=temp;
        }else
            Insert(n,x,root2);
    }

    int issame=inorder(root1,root2)&&postorder(root1,root2)&&preorder(root1,root2);
    if(issame)
        printf("Binary trees are same");
    else
        printf("Binary trees are not same");
    return 0;
}

2-این برنامه تابعی است که زیردرخت های چپ و راست یک درخت را جابه جا میکند(تا اخرین سطح بصورت بازگشتی ).این تابع دربرنامه میاد خروجی را برای یک درخت فرضی(با چاپ پیمایش های درخت اولیه ودرخت حاصل)ازمایش میکند.
کد:
[COLOR=royalblue]
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct Node{
    int value;
    Node*left;
    Node*right;
};
void Insert(int n,int x,Node*root){
    Node*temp=root;
    int right=0;
    for(int h=1;h!=n && temp;){
        for(int j=n;j/2>h;j/=2);
        if(j==h*2){
            if(temp->left)
                temp=temp->left;
            right=0;
        }
        if(j==h*2+1){
            if(temp->right)
                temp=temp->right;
            right=1;
        }
        h=j;
    }
    Node*t=(Node*)malloc(sizeof(Node));
    t->value=x;
    t->left=NULL;
    t->right=NULL;
    if(right)
        temp->right=t;
    else
        temp->left=t;
}
void inorder(Node*node){
    if(node->left)
        inorder(node->left);
    printf("%d,",node->value);
    if(node->right)
        inorder(node->right);
}
void postorder(Node*node){
    if(node->left)
        postorder(node->left);
    if(node->right)
        postorder(node->right);
    printf("%d,",node->value);
}
void preorder(Node*node){
    printf("%d,",node->value);
    if(node->left)
        preorder(node->left);
    if(node->right)
        preorder(node->right);
}
Node*Reverse(Node*root){
    Node*temp=root;
    if(temp){
        Node*t=temp->left;
        temp->left=Reverse(temp->right);
        temp->right=Reverse(t);
    }
    return temp;
}
int main(){
    clrscr();
    int n,x;
    Node*root=NULL;
    for(;;){
        printf("Please Enter a Number for element Place : ");
        scanf("%d",&n);
        if(n==0)
            break;
        printf("Please Enter a Number : ");
        scanf("%d",&x);
        if(!root){
            Node*temp=(Node*)malloc(sizeof(Node));
            temp->value=x;
            temp->left=NULL;
            temp->right=NULL;
            root=temp;
        }else
            Insert(n,x,root);
    }
    printf("\b \ninlorder (LVR) : ");
    inorder(root);
    printf("\b \npostlorder (LRV) : ");
    postorder(root);
    printf("\b \nprelorder (VLR) : ");
    preorder(root);
    printf("\b \b");
    root=Reverse(root);
    printf("\b \ninlorder (LVR) : ");
    inorder(root);
    printf("\b \npostlorder (LRV) : ");
    postorder(root);
    printf("\b \nprelorder (VLR) : ");
    preorder(root);
    printf("\b \b");
    return 0;
}

[/COLOR]اگه امکان داره از اساتید میخوام یک توضیحی در مورد سورس های این دو برنامه بدهند
 

جدیدترین ارسال ها

بالا