2014-09-06 32 views
-3

我的InsertInTree函數工作不正常,我無法找出我的問題。請建議我可以做出的更改(但我不想使用遞歸)。無法在C++中創建二進制搜索樹

它從結構和功能GetNewNode返回與左,右指針的節點作爲NULL取值:

public: 

void InsertInTree(int piData) 
{ 
    Node*newNode = NULL; 
    newNode=GetNewNode(piData); 
    if(root==NULL) 
    { 
     root=newNode; 
     return; 
    } 

    Node*temp = root; 

    while(temp!=NULL) 
    { 
     if(newNode->data<=temp->data) 
     { 
      temp=temp->left; 
     } 
     else 
     { 
      temp=temp->right; 
     } 

    } 

    temp=newNode; 
    return; 
} 
bool SearchNum(int piSearch) 
{ 

    if(root==NULL) 
    { 
     return false; 
    } 

    Node*temp=root; 
    while(temp!=NULL) 
    { 
     if(temp->data==piSearch) 
     { 
      return true; 
     } 
     else if(piSearch<=temp->data) 
     { 
      temp=temp->left; 
     } 
     else 
     { 
      temp=temp->right; 
     } 

    } 
    if(temp==NULL) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 
+0

和GetNewNode代碼... – 4pie0 2014-09-06 14:37:04

+1

另外,給什麼它現在做一個例子,你有什麼期待。 (「不能正常工作」可能是很多事情,崩潰,工作,但會造成錯誤的結果)//幫助我們幫助你 – Chris 2014-09-06 14:40:22

回答

0

假設根是全球性的。你應該使用另一個節點,即* pre(previousnode)。

*pre=NULL; 

while(temp!=NULL){ 
    if(newnode->data<=temp->data){ 
    pre=temp; 
    temp=temp->left; 
}else{ 
    pre=temp; 
    temp=temp->right; 
    } 
} 

if(newnode->data<=pre->data) 
pre->left=newnode; 
else 
pre->right=newnode; 

這樣便解決了問題..

0

以下應解決您的問題:

void InsertInTree(int piData) 
{ 
    Node* newNode = GetNewNode(piData); 
    Node** temp = &root; 

    while (*temp != NULL) 
    { 
     if (newNode->data <= (*temp)->data) 
     { 
      temp = &(*temp)->left; 
     } 
     else 
     { 
      temp = &(*temp)->right; 
     } 
    } 
    *temp = newNode; 
}