0

So i try to make binary tree using array implementation. I just start it but I got a problem. First, this is my struct that I use to build my node for the tree

typedef char infotype;
typedef int letak; //it's the variable to tell the array position number
typedef struct simpul
{
  infotype info;
  letak parent;
  letak rightSon, leftSon;
}elemenSimpul;

typedef struct 
{
  elemenSimpul treeMember[30]; //my tree have very maximum 30 nodes in it.
  int maksimum; //it's the variable to put how many node the user wants and should be under 30
}tree;

here is my btreestatic.h

#ifndef btreestatic_H
#define btreestatic_H
void createTree(tree T);
void createNode(tree T, int i, char value);
void initNode(tree T, int i);
#endif

and for construct the tree I use these at my btreestatic.c

#ifndef btreestatic_C
#define btreestatic_C

#include <stdio.h>
#include <math.h>
#include "btreestatic.h"

void createTree(tree T)
{
   T.treeMember[0].parent = -1;
}

void createNode(tree T,int i, char value)
{
  int leftchild;
  int rightchild;

  T.treeMember[i].info = value;

  leftchild = 2 * i + 1;
  rightchild = 2 * i + 2;

  if(leftchild < T.maksimum)
  {
     T.treeMember[i].leftSon = leftchild;
  }
  else
  {
    T.treeMember[i].leftSon = -1;
  }

  if (rightchild < T.maksimum)
  {
    T.treeMember[i].rightSon = rightchild;
  }
  else
  {
    T.treeMember[i].rightSon = -1;
  }

  if(i == 0)
  {
     T.treeMember[i].parent = -1;
  }
  else
  {
     T.treeMember[i].parent = (i - 1) / 2;
  }
}

void initNode(tree T, int i)
{
  char info;

  printf("Input node info : ");
  scanf(" %c", &info);

  createNode(T, i, info);
}
#endif

and on my driver is

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


int main() 
{
  tree A;
  int maksimum;
  int j;

  createTree(A);
  scanf("%d", &maksimum);
  A.maksimum = maksimum;


  for(j = 0; j < A.maksimum; j ++)
  {
     initNode(A, j);
  }

  printf("%c", A.treeMember[0].info);


  return 0;
 }

then I try my input as 3 (the maximum of the tree nodes are 3). First node(root) is 'a', second node is 'b', and third node is 'c'. But what i got on my screen is 'd' instead of 'a'. Can anyone tell me where did I go wrong? Thank you.

  • C uses pass-by-value. In `createTree(A)` you send a copy of `A` to the function (causing undefined behaviour since it was initialized) and then the function modifies the copy, leaving the original unchanged. Instead you can pass by pointer – M.M May 14 '20 at 02:33
  • i tried to disable the createTree(A) at the main driver, but it stills gave me the same output –  May 14 '20 at 02:55
  • `initNode` has the same problem – M.M May 14 '20 at 03:23
  • aah okay. I'm wondering if I use pointer is it still static allocation? –  May 14 '20 at 03:42

0 Answers0