二叉树找到下一个中序遍历节点的思路
假如说我们现在在cur这个节点上,对于中序遍历来说可以知道left子树是全部遍历过的,那么我们下面该遍历right子树
一.right不是空树:cur++是right子树的最左边节点。
二. right是一个空树:那么就相当于cur这棵子树已经是被遍历完了,我们需要向上。那么就会有两种情况:1.cur=parent->left 2.cur=parent->right。
1.对于cur=parent->left:cur作为一个左子树已经被遍历完了,所以下一个就是parent。
2.对于cur=parent->right:cur作为一个右子树已经遍历完了,那么就意味着parent这颗子树已经被遍历完了,那就变成的二的情况,将parent当作cur继续重复即可,直到出现情况1或者cur->parent==nullptr结束。
rbtreeiterator& operator++(){if (_node->_right != nullptr){_node = _node->_right;while (_node->_left) _node = _node->_left;}else{node* parent = _node->_parent;while (parent){if (_node == parent->_left) break;else{_node = parent;parent = parent->_parent;}}_node = parent;}return *this;}