我知道如何添加整数,只是无法为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;
}
}
}
答案 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中的每个比较以使用strcmp
。 std::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_ptr或std::unique_ptr(我认为已分享)