1

我无法编写代码来确定我的树中是否存在某些数据,这是 BinaryTreeNode 类

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

我需要完成的功能是(不能改变这个定义)

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

我试图创建一个像currentnode = this 这样的变量,并使用一个 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;
}
4

1 回答 1

1
while(this != NULL)

在第一次调用该函数时,this永远不会更改为NULL.

You can outright remove that one line. Then, just check for NULL in your two branches.

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

Once you've recursively checked the left and right trees, you're done.

于 2013-03-30T19:55:48.687 回答