简体   繁体   中英

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

This is a function to find the maximum amount of left nodes. I do realize that there is already a thread for that:

Count number of left nodes in BST

but I don't want pointers in my main file. So I am trying to find a slightly different approach.

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;
}

my problem is with the leftSide()/rightSide() function; How do I implement them so that it returns an iterator object that points to the left side/ right side of the iterator "it" object?

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


}

Edit:

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;
};

This very simple snipped of code should do the trick already:

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

As you did not declare the iterator's constructor explicit, it will get called automatically from the pointer to left/right returned.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM