c - 在 C 中具有数组实现的 K-ary 树
问题描述
大家好,所以我得到了这个任务来制作一个可以进行遍历的非二叉树的广告。我从一开始就搞砸了结构,但我仍然可以进行后序和前序遍历(我不知道我是否也做错了,但它有效)。现在我很困惑如何进行中序遍历。我的代码不起作用。
这是我的数据结构
typedef char infotype; typedef int letak; typedef struct { infotype info; letak parent, firstson, nextsibling; } node; typedef node tree;
这些是我初始化每个节点的方式
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; } } }
这就是我尝试进行有序遍历的方式
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; } } } }
这是我的主要驱动力:
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); }
我尝试了另一种用于按顺序遍历的算法,例如使用递归。但是由于我弄乱了结构,这些算法就不起作用了。之前谢谢你。
解决方案
if(i = T[T[i].parent].firstson)
应该
if(i == T[T[i].parent].firstson)
前者分配给i
,后者比较它。
推荐阅读
- gentoo - 纳米光标遍历某些文本会扰乱 gentoo 中的底层字母
- android - 如何在连续单击的按钮上打破循环
- heroku - Heroku 找不到那个应用
- java - 每 30 秒重启 Loader
- python - bash 脚本中的 coreutils 超时对应用程序不透明
- windows - flutter sdk 可以在 x86 windows 上运行吗?
- azure - 如何在 AzureAutomation 中使用 ConnectionType 作为 Azure 登录 AzureRm
- css - Flex wrap 不适用于固定宽度的容器
- ios - 不同的 AES 加密器给我不同的结果......为什么?
- arrays - 如何编辑子数组中的值