重载二元树的++运算符

时间:2014-10-17 01:51:37

标签: c++ iterator operator-overloading binary-tree increment

在我的程序中,我的二进制树有一个preOrder Iterator类。在其中我试图在++运算符上实现运算符重载,以便从头到尾遍历树。但我感到困惑,因为二叉树可以同时具有左侧和右侧。我怎么知道开头在哪里?它总是最左边的节点吗?

这是我的代码结构:

父二进制树:

/* Binary Tree */
class bin_tree
{
public:
    int data;
    bin_tree *left;
    bin_tree *right;
    bin_tree *parent;

    class preOrder_iterator; //child iterator class 
};

Child迭代器类:

/* Iterator class -- inherits from parent */
class bin_tree::preOrder_iterator : public bin_tree
{
        preOrder_iterator& operator ++ () //++ prefix operator overload
        {

        }
        preOrder_iterator begin();
        preOrder_iterator end();
};

我知道在开始和结束时使用什么,我将如何实现这个重载?

1 个答案:

答案 0 :(得分:1)

如果此节点具有右子树,则后继将是右子树中的第一个节点。所以去右边的子树,从那里继续往左走,直到你不能再离开了。该节点是继任者。

如果节点没有正确的子树,我们检查其父节点。如果它没有父树和没有右子树,它就是树中的最后一个节点。当我们到达父母时,有两个子案例:

  1. 我们是左边的节点。在这种情况下,我们的父母是我们的继任者。

  2. 我们是正确的节点。在这种情况下,我们遍历父节点链,直到找到我们之后的节点或找到没有父节点的节点。在前一种情况下,该节点是我们的继任者。在后一种情况下,我们是最后一个节点,没有继任者。