重载二进制树的++运算符

Overloading the ++ operator for binary trees

本文关键字:运算符 二进制 重载      更新时间:2023-10-16

在我的程序中,我有一个用于二进制树的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 
};

子迭代器类:

/* 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. 我们是左边的节点。在这种情况下,我们的父母就是我们的继承人。

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

相关文章: