首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >二叉树成员函数

二叉树成员函数
EN

Stack Overflow用户
提问于 2013-03-30 19:39:40
回答 1查看 903关注 0票数 1

我在编写代码以确定树中是否存在某些数据时遇到了问题,这是BinaryTreeNode类

代码语言:javascript
代码运行次数:0
运行
复制
class BinaryTreeNode {
  public:
    Data * nodeData;
    BinaryTreeNode * left;
    BinaryTreeNode * right;

我需要完成的函数是(不能更改这个定义)

代码语言:javascript
代码运行次数:0
运行
复制
bool BinaryTreeNode::member(Data * data) const {

我尝试创建一个变量,如currentnode = this,并使用while循环检查树的哪一侧向下移动,然后更新当前节点,但我似乎无法做到这一点。所以我在想,也许应该用递归来完成?我试过了,但是程序被锁住了。

如果有人能给我指明正确的方向,那将是非常有帮助的。

下面是我多次尝试(这次尝试递归)中的一个:

代码语言:javascript
代码运行次数:0
运行
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-30 19:55:48

代码语言:javascript
代码运行次数:0
运行
复制
while(this != NULL)

在对该函数的第一次调用中,this永远不会更改为NULL

--您可以直接删除这一行。,只需检查两个分支中的NULL

代码语言:javascript
代码运行次数:0
运行
复制
    if(left && nodeData->compareTo(data) == 1) {
        return left->member(data);
    }
    if(right && nodeData->compareTo(data) == -1) {
        return right->member(data);
    }

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15722708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档