gpt4 book ai didi

c - 简单的中序树遍历给出了一个非终止循环。 (使用数组)

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:27 28 4
gpt4 key购买 nike

以下是我构建一棵简单树的代码。我在这里使用的方法是,如果特定节点位于 arr[] 数组中的索引 n 处,那么它的左子节点位于索引 2*n+1 处,右子节点位于同一 arr 中的 2*n+2 处[] 大批。然后我正在进行中序遍历。但是,我在节点 D 处得到一个无限循环作为我的输出。如果有人能在这里帮助我,我会很高兴。

#include <stdio.h>
#include <malloc.h>

struct node
{
struct node * lc;
char data;
struct node * rc;
};

char arr[] = {'A','B','C','D','E','F','G','\0','\0','H','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'};
struct node * root = NULL;

struct node * buildTree(int rootIndex)
{
struct node * temp = NULL;

if(arr[rootIndex]!='\0')
{
temp = (struct node *)malloc(sizeof(struct node));
temp->lc = buildTree(rootIndex * 2 + 1);
temp->data = arr[rootIndex];
temp->rc = buildTree(rootIndex * 2 + 2);
}

return temp;
}

void inorder(struct node * parent)
{
while(parent != NULL)
{
inorder(parent->lc);
printf("%c\t",parent->data);
inorder(parent->rc);
}
}

int main()
{
root = buildTree(0);
inorder(root);
return 0;
}

最佳答案

如评论中提到的BLUEPIXY,需要将inorder()方法中的while替换为if。构建树时,D 形成最左边的 child 。因此,在中序遍历期间,遇到 D 作为要打印的第一个节点。但是 while 循环会继续打印它,因为条件永远不会变为假。

我确信像 gdb 这样的工具在解释这一点上会做得更好。

关于c - 简单的中序树遍历给出了一个非终止循环。 (使用数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454432/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com