我在编写代码以确定树中是否存在某些数据时遇到了问题,这是BinaryTreeNode类
class BinaryTreeNode {
public:
Data * nodeData;
BinaryTreeNode * left;
BinaryTreeNode * right;
我需要完成的函数是(不能更改这个定义)
bool BinaryTreeNode::member(Data * data) const {
我尝试创建一个变量,如currentnode = this,并使用while循环检查树的哪一侧向下移动,然后更新当前节点,但我似乎无法做到这一点。所以我在想,也许应该用递归来完成?我试过了,但是程序被锁住了。
如果有人能给我指明正确的方向,那将是非常有帮助的。
下面是我多次尝试(这次尝试递归)中的一个:
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;
}
发布于 2013-03-30 11:55:48
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);
}
一旦递归地检查了左右树,就完成了。
https://stackoverflow.com/questions/15722708
复制