gpt4 book ai didi

c - 如何获得非空二叉树并打印它?

转载 作者:行者123 更新时间:2023-12-04 07:40:35 25 4
gpt4 key购买 nike

我构建了三个文件,包括 MainFunc.c、AllFun.h 和 OtheFunc.c。
程序发生运行时错误,不打印任何内容。但是,我需要它按照先前的顺序输出一棵树。
我猜问题可能是我建了一棵空树,但我无法解决它。
主函数

#include "AllFun.h"
int main(int argc, char* argv[])
{
int nums[MaxSize] = { 0 };
printf("Enter value of root node: ");
for (int i = 0; i < MaxSize; ++i) {
scanf_s("%d", &nums[i]);
}
TreeNode* root = create(nums, MaxSize);
preorder(root);
return 0;
}
全趣网
#include <stddef.h>   // NULL
#include <stdlib.h>
#include <stdio.h>
#define MaxSize 10
typedef struct node {
int data;
struct node* lchild, * rchild;
} TreeNode;
TreeNode *create(int nums[], int n);
void preorder(TreeNode *root);
其他函数
#include "AllFun.h"
TreeNode* newNode(int v) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
if (node) {
node->data = v;
node->lchild = node->rchild = NULL;
return node;
}
}
void insert(TreeNode* root, int x)
{
if (root == NULL) {
root = newNode(x);
return;
}
if (root->data < x) {
insert(root->lchild, x);
}
else {
insert(root->rchild, x);
}
}
TreeNode *create(int nums[], int n)
{
TreeNode* root = NULL; // Build a empty root node
for (int i = 0; i < n; i++) {
insert(root, nums[i]);
}
return root;
}
void preorder(TreeNode* root)
{
if (root == NULL) {
return;
}
printf("%d ", root->data);
preorder(root->lchild);
preorder(root->rchild);
}

最佳答案

您必须将节点作为指向指针的指针传递,然后函数可以更改指针:

void insert(TreeNode** root, int x)
{
if (*root == NULL) {
*root = newNode(x);
return;
}
if ((*root)->data < x) {
insert(&(*root)->lchild, x);
}
else {
insert(&(*root)->rchild, x);
}
}
调用 insert(&root, nums[i]); :
https://ideone.com/nV5q1g

关于c - 如何获得非空二叉树并打印它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67500362/

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