2013-03-30 112 views
1

遇到麻煩編寫代碼,以確定是否某些數據出現在我的樹,這是BinaryTreeNode類二叉搜索樹成員函數

class BinaryTreeNode { 
    public: 
    Data * nodeData; 
    BinaryTreeNode * left; 
    BinaryTreeNode * right; 

我需要完成的功能是(不能改變這個定義)

bool BinaryTreeNode::member(Data * data) const { 

我試圖創建一個變量,像currentnode =這個和使用while循環來檢查進度其中樹的一面朝下,然後更新currentnode,但我似乎無法讓這個工作。所以我想也許它應該用遞歸完成?我試過了,但程序鎖定了。

如果有人能指出我正確的方向,這將是非常有益的。

這裏是我的許多嘗試之一(這一個嘗試遞歸):

bool BinaryTreeNode::member(Data * data) const { 
    if(nodeData == NULL) { 
     return false; 
    } 
    else if (nodeData->compareTo(data) == 0) { 
     return true; 
    } 
    while(this != NULL) { 
     if(nodeData->compareTo(data) == 0) { 
      return true; 
     } 
     else if(nodeData->compareTo(data) == 1) { 
      return left->member(data); 
     } 
     else if(nodeData->compareTo(data) == -1) { 
      return right->member(data); 
     } 
    } 

    return false; 
} 
+1

你可以發佈你已經試過的代碼,以便我們可以幫助你調試 – Pradheep

+0

你的兩次嘗試都可以完成這項工作。但顯然,我們無法告訴您錯誤在哪裏。 –

+0

編輯我的遞歸嘗試 –

回答

1
while(this != NULL) 

在第一次調用該函數,this永遠不會改變,以NULL

您可以直接刪除該行。然後,只需在您的兩個分支中檢查NULL

if(left && nodeData->compareTo(data) == 1) { 
     return left->member(data); 
    } 
    if(right && nodeData->compareTo(data) == -1) { 
     return right->member(data); 
    } 

一旦你遞歸檢查左右樹,就完成了。

+0

@SeanLafferty試試吧。 :) –

+0

@SeanLafferty請更新您的問題中的代碼。 –