二叉搜索树成员函数

时间:2013-03-30 19:39:41

标签: c++ tree binary-tree binary-search-tree

我在编写代码时无法确定我的树中是否存在某些数据,这是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;
}

1 个答案:

答案 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);
    }

一旦你递归检查了左右树,你就完成了。