重载二进制树的++运算符
Overloading the ++ operator for binary trees
在我的程序中,我有一个用于二进制树的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();
};
如果我想知道开始和结束时使用什么,我将如何实现这种过载?
如果此节点有右子树,则后续节点将是右子树中的第一个节点。所以去右边的子树,从那里开始,继续向左走,直到你不能再向左走了。该节点是后续节点。
如果节点没有合适的子树,我们会检查它的父节点。如果它没有父节点,也没有右子树,那么它就是树中的最后一个节点。当我们到达父级时,有两个子情况:
-
我们是左边的节点。在这种情况下,我们的父母就是我们的继承人。
-
我们是正确的节点。在这种情况下,我们遍历父节点链,直到找到后面的节点或找到没有父节点的节点。在前一种情况下,该节点是我们的继任者。在后一种情况下,我们是最后一个节点,没有后续节点。
相关文章:
- 正在尝试重载二进制搜索树分配运算符
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 消除好友和成员二进制运算符的歧义
- C2679 二进制"<<":未找到采用右操作数类型的运算符
- 如何为我的类实现/重载二进制运算符
- 枚举和二进制或运算符(MISRA C++ 2008,4-5-2)
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 错误 C2679 二进制"<<":未找到采用类型为 'T' 的右侧操作数的运算符
- 无法使用迭代器查找类对象。(二进制 '==': 'userInfo' 不定义此运算符)
- 二进制 '==':未找到采用 'Enemy' 类型左侧操作数的运算符(或者没有可接受的转换)
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 你能帮我了解重载一元运算符和二进制运算符之间的区别吗?
- c++ 错误:二进制"运算符+"类型"矩阵*"和"矩阵*"的操作数无效
- 二进制">>":未找到采用类型为"std::p air<int,int>"的右操作数的运算符
- 编译器如何区分二进制运算符和模板C++令牌>>
- 错误:二进制">>":未找到采用类型为"const char [1] 的右操作数的运算符
- 为什么我不能定义一元运算符,然后在 MSVC 的模板类中声明具有相同名称的友元二进制运算符?
- 二进制 '=':未找到采用右操作数的运算符(或者没有可接受的对话)
- C++不是按位运算符二进制字符转换