//++操作:右子树为空,回到parent->_left = cur的parent的位置,右子树不为空,走到右子树的最左节点
//--操作:相反,左子树为空,回到parent->_right = cur的parent的位置,左子树不为空,走到左子树的最右节点
_self& operator++() //中序遍历(非递归)
{
if (_node->_right) //该节点右子树不为空,下一个节点就是该节点右子树最左节点
{
node* leftOfRightNode = _node->_right;
while (leftOfRightNode->_left)
{
leftOfRightNode = leftOfRightNode->_left;
}
_node = leftOfRightNode; //当前访问指向调整
}
else //右子树为空
{
node* cur = _node;
node* parent = cur->_parent;
while (parent && cur == parent->_right)
{
cur = parent;
parent = parent->_parent;
}
_node = parent; //当前访问指向调整
}
return *this;
}
_self& operator--() //反中序遍历(非递归)
{
if (_node->_left) //该节点左子树不为空,下一个节点就是该节点左子树最右节点
{
node* rightOfLeftNode = _node->_left;
while (rightOfLeftNode->_right)
{
rightOfLeftNode = rightOfLeftNode->_right;
}
_node = rightOfLeftNode; //当前访问指向调整
}
else //左子树为空
{
node* cur = _node;
node* parent = cur->_parent;
while (parent && cur == parent->_left)
{
cur = parent;
parent = parent->_parent;
}
_node = parent; //当前访问指向调整
}
return *this;
}