使用二进制搜索树中的迭代器对象访问左侧节点

Accessing the left node with an iterator object in a Binary Search Tree

本文关键字:访问 对象 节点 迭代器 二进制 搜索树      更新时间:2023-10-16

这是一个查找左节点最大数量的函数。我确实意识到已经有一个线程:

统计BST 中的左侧节点数

但我不希望在我的主文件中有指针。因此,我试图找到一种稍微不同的方法。

bst<int>::binTreeIterator it;

int findMax(bst<int>::binTreeIterator it)
{
int l = 0, r;
if (!(it.leftSide() == NULL)) {
l += 1 + findMax(it.leftSide());
}
if (!(it.rightSide() == NULL)) {
r = findMax(it.rightSide());
}
return l;
}

我的问题是使用leftSide((/rightSide(,(函数;我如何实现它们,以便它返回一个指向迭代器"it"对象左侧/右侧的迭代器对象?

template <class Type>
typename bst<Type>::binTreeIterator bst<Type>::binTreeIterator::leftSide()
{

}

编辑:

template <class Type>
class bst
{
struct binTreeNode
{
binTreeNode * left;
binTreeNode * right;
Type item;
};
public:
class binTreeIterator
{
public:
friend class bst;
binTreeIterator();
binTreeIterator(binTreeNode*);
bool operator==(binTreeNode*);
bool operator==(binTreeIterator);
binTreeIterator rightSide();
binTreeIterator leftSide();
private:
binTreeNode * current;
};
bst();
bst(const bst<Type>&);
const bst& operator=(const bst<Type>&);
~bst();
void insert(const Type&);
void display(); // TEST
binTreeIterator begin();
binTreeIterator end();
private:
binTreeNode * insert(binTreeNode*, const Type&);
void inorder(binTreeNode*);
void destroyTree(binTreeNode*);
void cloneTree(binTreeNode*, binTreeNode*);
binTreeNode * root;
};

这个非常简单的代码片段应该已经完成了任务:

template <class Type>
typename bst<Type>::binTreeIterator bst<Type>::binTreeIterator::leftSide()
{
return current->left;
}

由于您没有显式声明迭代器的构造函数,它将从返回的左/右指针中自动调用。