【问题标题】:K-ary tree with array implementation in C在 C 中具有数组实现的 K-ary 树
【发布时间】:2020-04-27 03:58:45
【问题描述】:

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

  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); 
    }
    

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

【问题讨论】:

  • 您必须首先定义三叉树或更高叉树的按序遍历是什么意思,然后才能支持它。是否会在 每个 对连续的子代之间遍历父代?如果不是,那么它在哪一对之间遍历?有多种选择。
  • 我想我的意思是在我得到第一个儿子后立即遍历父母
  • 看起来节点i的父节点始终是节点(i-1)/k,它的j'th子节点(其中0 &lt;= j &lt; k)始终是(i * k) + j + 1。为什么需要nodeparentfirstSon 字段?您的树完全由 infotype 数组和该数组中的元素数定义。

标签: c tree inorder


【解决方案1】:
    if(i = T[T[i].parent].firstson)

应该是

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

前者赋值给i,后者进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2012-01-05
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多