2015-12-02 148 views
0

我必须编写一些代码,以字母顺序自动将单词添加到二叉树。我知道我必须加入循环和更多的陈述,我只是不知道在哪里。
如果单词按字母顺序变小,则应该向左,否则向右。按字母顺序排序的二叉树

这是我到目前为止的代码:

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 

回答

0

让我们开始循环。这段代码有点接近,并且你可以在插入方法的if/else周围添加一个while(true) {}循环。

但是,如果用户多次进入相同状态(>为假,但是您想要转向另一个方向),您将遇到一些问题。或者,如果用户输入“',该怎么办?你会想添加一些错误检查到你的插入方法。

你也可能不想在每次输入else时重新创建temp节点 - 你将要创建(我认为)d-1(其中d =树的深度)extra每次插入内容时节点。

+0

非常感谢!这有助于我和我得到它的工作,现在我在我的下一个问题,所有州的字母列表。 – dave

+0

这似乎很简单。假设最左边的节点将是你的第一个状态,它将会是你的树从左到右的遍历。这可以通过递归算法或循环分解为遍历子树。 – bstockwell