2015-12-02 150 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