2013-03-30 3 views
1

У меня возникли проблемы написания кода, чтобы определить, есть ли какие-то данные присутствует в моем дереве, это класс BinaryTreeNodeДвоичное дерево член Функция

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

функция мне нужно закончить это (не может изменить это определение)

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

Я пытался создать переменную как сиггепЬЫойе = это и использовать время цикла, чтобы проверить, какая сторона дерева прогрессировать вниз, а затем обновить сиггепЬЫойе, но я не могу чтобы это работало. Поэтому я думаю, возможно, это должно быть достигнуто с рекурсией? Я пробовал это, но программа блокируется.

Если бы кто-нибудь мог указать мне в правильном направлении, это было бы очень полезно.

Вот один из моих многочисленных попыток (это один пытается рекурсии):

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

отредактировал op с моей попыткой рекурсии –

ответ

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 Пожалуйста, обновите код в своем вопросе. –

Смежные вопросы