gpt4 book ai didi

c++ - 在二叉搜索树 C++ 中插入字符串时出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:34 25 4
gpt4 key购买 nike

没有编译错误。每当我执行程序时都会崩溃,当我尝试调试它时,它会指向“newNode->data = n;”我在插入字符串时做错了什么吗?

// Assignment 5.cpp : Defines the entry point for the console application.

// Matthew - Assignment 5

#include "stdafx.h"
#include <stdlib.h>
#include <string>

using namespace std;

struct treeNode
{
string data;
struct treeNode *left;
struct treeNode *right;
};

void insert(struct treeNode **node, string n);
void preOrder(struct treeNode *node);
void inOrder(struct treeNode *node);
void postOrder(struct treeNode *node);

int _tmain(int argc, _TCHAR* argv[])
{
struct treeNode *root = NULL;


insert(&root, "polymorphism");
insert(&root, "object");
insert(&root, "templates");
insert(&root, "structure");
insert(&root, "class");
insert(&root, "pointer");
insert(&root, "reference");
insert(&root, "traversal");
insert(&root, "inheritance");
insert(&root, "exceptions");
insert(&root, "recursive");
insert(&root, "overloading");


printAll(root);
printf("\n\n");


return 0;
}

void insert(struct treeNode **node, string n)
{
if (*node == NULL)
{ //tree (or the current sub tree) is empty
struct treeNode *newNode;
newNode = new treeNode;
newNode->data = n;
newNode->left = NULL;
newNode->right = NULL;
*node = newNode;
}

else if (n < (*node)->data)
insert(&((*node)->left), n);
else if (n >(*node)->data)
insert(&((*node)->right), n);
}

关于我的遍历代码。好看吗?

void preOrder(struct treeNode *node)
{
if (node != NULL)
{
printf("%d ", node->data);
preOrder(node->left);
preOrder(node->right);
}
}

void inOrder(struct treeNode *node)
{
if (node != NULL)
{
inOrder(node->left);
printf("%d ", node->data);
inOrder(node->right);
}
}

void postOrder(struct treeNode *node)
{
if (node != NULL)
{
postOrder(node->left);
postOrder(node->right);
printf("%d ", node->data);
}
}

void printAll(struct treeNode *node)
{
printf("preOrder: ");
preOrder(node);
printf("\n");
printf("inOrder: ");
inOrder(node);
printf("\n");
printf("postOrder: ");
postOrder(node);
printf("\n");
}

最佳答案

输出数字的原因是您使用的 printf 格式说明符错误。

    printf("%d ", node->data);

这是不正确的。要解决此问题,您真的应该使用 std::cout,因为这是 C++:

    #include <iostream>
//...
std::cout << node->data;

如果您使用 C++ 流,您将永远不会遇到 printf 引起的麻烦,并且它不是类型安全的并且需要您为其提供正确的格式说明符。

您的原始代码不仅输出整数,还调用未定义的行为。为要打印的数据提供错误的格式说明符 printf 会导致未定义的行为。

如果你真的想使用 printf,那么正确的使用方法应该是:

printf("%s", node->data.c_str());

关于c++ - 在二叉搜索树 C++ 中插入字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29885443/

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