如何在bst c ++中添加char类型?

时间:2015-01-13 18:43:53

标签: c++ char binary-search-tree

我知道如何添加整数,只是无法为char []类型做,请帮忙。 下面的代码是针对整数的,它确实有效,但如果是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;
        }
    }
}  

2 个答案:

答案 0 :(得分:1)

您只需要更改节点中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作为数据类型应仅需要更改节点以及指定{的类型的任何位置{1}}。

答案 1 :(得分:0)

这不是答案,但你有内存泄漏。 在树中已经存在int,你不删除“newnode”

你有

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

应该有

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

或者你应该使用

之一

std::shared_ptrstd::unique_ptr(我认为已分享)