按字母顺序排列的二叉树
Alphabetically ordered binary tree
我必须编写一些代码,自动按字母顺序将单词添加到二叉树中。我知道我必须放入循环和更多 if 语句,我只是不知道在哪里。
如果单词按字母顺序较小,则应位于左侧,否则位于右侧。
到目前为止,这是我的代码:
struct node
{
string info;
node* right;
node* left;
}; //closes node
class States
{
private:
node* start;
public:
void insert();
void delete();
void list();
void search();
States();
}; //closes States class
States::States()
{
start = new node;
start -> left = NULL;
start -> right = NULL;
start -> info = ' ';
}
void States::insert()
{
string state;
char c;
node *temp, *p, *s;
p = start;
s = start;
cout<<"Please enter the state you want to add: ";
cin>>state;
if(s -> info == ' ')
{
s -> info = state;
cout<<"Added state "<<state<<"to the list.\n";
cout<<"Ready to continue? (enter y)";
cin>>c;
return;
}//close if
else
{
temp = new node;
temp ->info = state;
if(s->info > temp->info)
{
p = p-> left;
if(
p = s -> left;
}//close if
}//close else
}//close insert function
让我们从循环开始。这段代码有点接近,您几乎可以在插入方法中围绕 if/else 添加一个 while(true) {}
循环。
但是您将 运行 解决用户多次进入同一状态的情况的一些问题(> 为假,但您是否想转向另一个方向)。或者如果用户输入 ' ' 怎么办。您需要向插入方法添加一些错误检查。
您可能也不希望每次输入 else 时都重新创建临时节点——您将创建(我认为)d-1(其中 d = 树的深度)每次插入内容时都会有额外的节点。
我必须编写一些代码,自动按字母顺序将单词添加到二叉树中。我知道我必须放入循环和更多 if 语句,我只是不知道在哪里。
如果单词按字母顺序较小,则应位于左侧,否则位于右侧。
到目前为止,这是我的代码:
struct node
{
string info;
node* right;
node* left;
}; //closes node
class States
{
private:
node* start;
public:
void insert();
void delete();
void list();
void search();
States();
}; //closes States class
States::States()
{
start = new node;
start -> left = NULL;
start -> right = NULL;
start -> info = ' ';
}
void States::insert()
{
string state;
char c;
node *temp, *p, *s;
p = start;
s = start;
cout<<"Please enter the state you want to add: ";
cin>>state;
if(s -> info == ' ')
{
s -> info = state;
cout<<"Added state "<<state<<"to the list.\n";
cout<<"Ready to continue? (enter y)";
cin>>c;
return;
}//close if
else
{
temp = new node;
temp ->info = state;
if(s->info > temp->info)
{
p = p-> left;
if(
p = s -> left;
}//close if
}//close else
}//close insert function
让我们从循环开始。这段代码有点接近,您几乎可以在插入方法中围绕 if/else 添加一个 while(true) {}
循环。
但是您将 运行 解决用户多次进入同一状态的情况的一些问题(> 为假,但您是否想转向另一个方向)。或者如果用户输入 ' ' 怎么办。您需要向插入方法添加一些错误检查。
您可能也不希望每次输入 else 时都重新创建临时节点——您将创建(我认为)d-1(其中 d = 树的深度)每次插入内容时都会有额外的节点。