2

我正在制作一个如何制作二叉树的简单程序,它是给定二叉树的图像..

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct tree { int data; struct tree * left ; struct tree * right} tree;

 int main()  
 {  
    tree * t = malloc(sizeof(tree));

    t->data = 12;
    t->left = malloc(sizeof(tree));
    t->right = malloc(sizeof(tree));

    t->left->data = 13;
    t->right->data = 16;

    t->left->left =NULL;
    t->left->right =NULL;

    t->right->left =NULL;
    t->right->right =NULL;

    inorder(t);

    tree * x = NULL   ;
    reverse(t, &x);

    inorder(x);
    }

// reverse is to create image of binary tree 
    void reverse (tree * t , tree ** r){

    if(t == NULL) return;

    *r = (tree *)malloc(sizeof(tree));

    (*r)->data = t->data;
    (*r)->left = NULL;
    (*r)->right = NULL;

    reverse(t->right,&((*r)->left) );
    reverse(t->left,&((*r)->right));

    }

    void inorder(tree *t)
    { if(t==NULL) return;

       printf("%d ", t->data);
       inorder( t->left);
       inorder( t->right);
    }

这给出了分段错误 ..请帮助........

4

3 回答 3

1

正确的程序:

#include<stdio.h>
#include<stdlib.h>

typedef struct tree { int data; struct tree * left ; struct tree * right;};// tree;

void reverse (tree * t , tree ** r);
void inorder(tree *t);

int main()  
 {  
    tree * t = (tree *)malloc(sizeof(tree));

    t->data = 12;
    t->left = (tree *)malloc(sizeof(tree));
    t->right = (tree *)malloc(sizeof(tree));

    t->left->data = 13;
    t->right->data = 16;

    t->left->left =NULL;
    t->left->right =NULL;

    t->right->left =NULL;
    t->right->right =NULL;

    inorder(t);

    tree * x = NULL   ;
    reverse(t, &x);

    inorder(x);
    }

// reverse is to create image of binary tree 
    void reverse (tree * t , tree ** r){
    if(t != NULL)printf("%d ", t->data);
    if(t == NULL) return;

    *r = (tree *)malloc(sizeof(tree));

    (*r)->data = t->data;
    (*r)->left = NULL;
    (*r)->right = NULL;

    reverse(t->right,&((*r)->left) );
    reverse(t->left,&((*r)->right));

    }

    void inorder(tree *t)
    { if(t==NULL) return;

       printf("%d ", t->data);
       inorder( t->left);
       inorder( t->right);
    }
于 2014-03-31T07:34:35.163 回答
1

代替

reverse(t->right,((*r)->left) );
reverse(t->left,((*r)->right));

reverse(t->right, &((*r)->left));
reverse(t->left, &((*r)->right));

然后再试一次。

于 2014-03-31T07:36:10.083 回答
0
reverse(t->right,((*r)->left) );
reverse(t->left,((*r)->right));

应该

reverse(t->right,&((*r)->left) );
reverse(t->left,&((*r)->right));

现在 atree*被转换为 a tree**。您可能在编译期间收到警告。

于 2014-03-31T07:36:30.407 回答