Hello,

I want to run a few tests on a full binary tree so I built one. It is supposed to have 3 levels, 8 leaf nodes a-h at last. My print_tree() method causes a segmentation fault. It is not because I did not use malloc() to reserve memory, I just tested it. Can someone explain why it happens?
And what is the easiest way to build a full binary tree with the least amount of code?

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


typedef struct Node node;


struct Node{
  unsigned int value;
  struct Node* left;
  unsigned int left_edge : 1;
  struct Node* right;
  unsigned int right_edge : 1;
};


void print_tree(node* root){
  printf("%s = %d\n", "value of node ", root->value);
  if (root->left_edge != NULL){
    print_tree(root->left_edge);
  }
  if (root->right_edge != NULL){
    print_tree(root->right_edge);
  }


}


int main(){


  node a = {1,NULL,NULL};
  node b = {2,NULL,NULL};
  node c = {3,NULL,NULL};
  node d = {4,NULL,NULL};
  node e = {5,NULL,NULL};
  node f = {6,NULL,NULL};
  node g = {7,NULL,NULL};
  node h = {8,NULL,NULL};


  node inner_3 = {0, &a, &b, 0, 1};
  node inner_4 = {0, &c, &d, 1, 0};
  node inner_5 = {0, &e, &f, 1, 0};
  node inner_6 = {0, &g, &h, 1, 0};


  node inner_2 = {0, &inner_5, &inner_6, 1, 0};
  node* inner_1 = malloc(sizeof(node));
  inner_1->value = 2;
  inner_1->left_edge = &inner_3;
  inner_1->right_edge = &inner_4;
  inner_1->left_edge = 1;
  node root = {0, &inner_1, &inner_2, 0, 1};


  print_tree(&root);


  return 0;


}