具有C中数组实现的K元树

问题描述 投票:0回答:1

大家好,所以我得到了这个任务,以制造可以遍历的非二叉树。我从一开始就弄乱了结构,但是我仍然可以进行后遍历和前遍历(我也不知道我是否也做错了,但是可以用)。现在我很困惑如何进行有序遍历。我的代码不起作用。

  1. 这是我的数据结构

    typedef char infotype;
    typedef int letak;
    
    typedef struct {
      infotype info;
      letak parent, firstson, nextsibling;
    } node;
    
    typedef node tree;
    
  2. 这些是我初始化每个节点的方式

      void initNode(tree T[], int k, int i)
      {
        char info;
    
      printf("Input the node name : ");
      scanf(" %c", &info);
      createNode(T, k, i, info);
    }
    
    void createNode(tree T[], int k, int i, char value)
    {
      int j;
    
      if(i == 0)
      {
        T[i].info = value;
        T[i].firstson = i+1;
      }
      else
      {
        T[i].info = value;
        T[i].parent = (i-1) / k;
        T[i].firstson = (i * k) + 1;
    
        if (i % k != 0)
        {
            T[i].nextsibling = i+1;
        }
    
        else
        {
            T[i].nextsibling = 0;
        }
      }
    }
    
  3. 这就是我尝试进行有序遍历的方式

    void InOrder(tree T[], int maksimum_array, int maksimum_anak)
    {
      bool Resmi = true;
    
      int i = 0;
    
      while(i >= 0)
      {
        if(T[i].firstson < maksimum_array - 1 && Resmi == true)
        {
            i = T[i].firstson;
        }
        else 
        {
            if(Resmi == true)
            {
                printf("%c ", T[i].info);
            }
    
            if(i = T[T[i].parent].firstson)
            {
                printf("%c ", T[T[i].parent].info);
            }
    
            if(T[i].nextsibling < maksimum_array - 1 && T[i].nextsibling != 0)
            {
                i = T[i].nextsibling;
                Resmi = true;
            }
            else
            {
                i = T[i].parent;
                Resmi = false;
            }   
         }
       }
     }
    
  4. 这是我的主要驱动力:

     int main()
     {
       tree pohon[1000];
       int maksimum;
       int maksimum_anak;
       int level;
       int i = 0;
       int count = 0;
       char cari;
    
       printf("Enter array maximum amount : ");
       scanf("%d", &maksimum);
    
       printf("\nEnter maximum child of each node : ");
       scanf("%d", &maksimum_anak);
    
       createTree(pohon);
    
       for (i = 0; i < maksimum ; i++)
       {
          initNode(pohon, maksimum_anak, i);
       }
    
       for (i = 0; i < maksimum; i++)
       {
          printTree(pohon, i, maksimum, maksimum_anak);
       }    
    
       printf("In Order Traversal : ");
       InOrder(pohon, maksimum, maksimum_anak); 
    }
    

我已经尝试了另一种用于顺序遍历的算法,例如使用递归。但是由于我弄乱了结构,所以这些算法不起作用。谢谢你。

c tree inorder
1个回答
0
投票
    if(i = T[T[i].parent].firstson)

应该是

    if(i == T[T[i].parent].firstson)

前者分配给i,后者进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.