如何在BST C ++中添加字符类型

how to add char type in bst c++?

本文关键字:添加 字符 类型 BST      更新时间:2023-10-16

我知道如何添加整数,只是无法为 char[] 类型做,请帮忙.下面的代码适用于整数,它确实有效,但是如何在字符的情况下进行比较?

void insert (int a)
{
    node *newnode= new node;
    newnode->data= a;
    if ( isempty() )
    {
        root= newnode;
    }
    else
    {
        node *temp=root; 
        while(temp!=NULL)
        {
            if(temp->data > a)
            {
                if(temp->left==NULL)
                    temp->left=newnode;
                temp=temp->left;
            }
            else if(temp->data < a)
            {
                if(temp->right==NULL)
                    temp->right=newnode;
                temp=temp->right;
            }
            else if(temp->data==a)
                temp=NULL;
        }
    }
}  
您只需

更改节点中data字段的类型:
char data;

如果要具有多个字符的数据字段,则应使用std::string
std::string data;

若要使 BST 更通用,请考虑使用模板来定义该数据类型。

template <class DataType>
struct Node
{
  Node<DataType> * left;
  Node<DataType> * right;
  DataType         data;
};

编辑 1:
如果您坚持在节点中使用char *作为字符串类型,则必须将 BST 中的每个比较更改为使用 strcmpstd::string数据类型已定义operator==operator<,因此使用 std::string 作为数据类型应该只需要更改节点以及指定data类型的位置。

这不是答案,但你有内存泄漏。当在树中已经有那个int时,你不会删除"newnode"

您拥有的位置

 else
      if(temp->data==a)
           temp=NULL;

应该有

else
      if(temp->data==a)
        {
           temp=NULL;
            delete newnode;
        }

或者您应该使用以下之一

std::shared_ptr 或 std::unique_ptr(我认为是共享的)