【问题标题】:C language:Binary search tree with stringsC语言:带字符串的二叉搜索树
【发布时间】:2021-04-10 07:37:58
【问题描述】:

我必须为strings 创建一个二叉搜索树程序,它计算每个单词重复的次数,而且我似乎无法让程序按预期执行,因为在打印出来时,首先应该打印的是小于原始节点的单词/字符,然后是大于原始节点的单词/字符。但是我的程序是做什么的,它只是按照我介绍单词/字符的顺序打印出来,我还在想,如何实现程序中计算每个单词出现次数的部分。

#include<stdio.h>
#include<stdlib.h>

#define MAX 15

typedef struct BST
{
    char data[MAX];
    struct BST *left;
    struct BST *right;
} node;

node *create();
void insert(node *,node *);
void preorder(node *);

int main()
{
    char ch;
    node *root=NULL,*temp;

    do
    {
        temp=create();
        if(root==NULL)
        {
            root=temp;
        }
        else
        {
            insert(root,temp);
        }
        printf("\nDo you want to enter more(y/n)?");
        ch=getch();

    }
    while(ch=='y'||ch=='Y');

    printf("\nPreorder Traversal: ");
    preorder(root);
    return 0;
}

node *create()
{
    node *temp;
    printf("\nEnter data:");

    temp=(node*)malloc(sizeof(node));

    fgets(&temp->data,MAX,stdin);

    temp->left=temp->right=NULL;

    return temp;
}

void insert(node *root,node *temp)
{
    if(temp->data<root->data)
    {
        if(root->left!=NULL)
            insert(root->left,temp);
        else
            root->left=temp;
    }

    if(temp->data>root->data)
    {
        if(root->right!=NULL)
            insert(root->right,temp);
        else
            root->right=temp;
    }
}

void preorder(node *root)
{
    if(root!=NULL)
    {
        printf("%s ",root->data);
        preorder(root->left);
        preorder(root->right);
    }
}

这是我在 cmets 中某人的帮助下想出的,它按预期工作

void insert(node *root,node *temp)
{
    int cmp_rezult=strcmp(temp->data,root->data);
    printf("\nCompare:%d ", cmp_rezult);
    if(cmp_rezult<0)
    {
        if(root->left!=NULL)
        insert(root->left,temp);
        else
        root->left=temp;
    }
    if(cmp_rezult>0)
    {
        if(root->right!=NULL)
        insert(root->right,temp);
        else
        root->right=temp;
    }
}

【问题讨论】:

  • 您应该添加:1)输入 2)预期输出 3)实际输出

标签: c string function tree


【解决方案1】:

insert 你这样做:

temp->data<root->data

但这不是你在 C 中比较字符串的方式。

要比较字符串,请使用strcmp

此外,insert 似乎错过了处理“相等”的代码块。

比如:

int cmp_result = strcmp(temp, data<root->data);
if (cmp_result < 0)
{
    // Handle less than
}
else if (cmp_result > 0)
{
    // Handle greater than
}
else  // i.e. cmp_result == 0
{
    // Handle equal
}

【讨论】:

  • 谢谢你,你的想法对我有用,现在我正在考虑如何计算出场次数
  • @vlad 要计算出现次数,请遍历整个树并使用strcmp(..., ...) == 0。无论如何...我认为您应该针对该部分提出另一个问题。
  • 已经解决了,谢谢大家的帮助
猜你喜欢
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多