随笔 - 4326,  文章 - 1,  评论 - 32,  阅读 - 279万
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

想要获取中序遍历时某一节点的直接后继,

  • 首先在数据结构上,结点必须维护指向父节点的指针(parent),
    • 因为当前结点的后继有可能是其父节点,
      • 如果其本身没有右孩子;
      • 或者本身是左孩子结点;
  • 注意对当前结点进行分类讨论
    • 是否有右孩子
      • 有:递归遍历右孩子的左孩子,直到没有左孩子为止;
      • 无:当前结点是否为右孩子,
        • 是:
        • 否:返回其父结点;
template<typename T>
BinNodePosi(T) BinNode<T>::succ(){
    BinNodePosi(T) s = this;
    if (rChild) {
        s = rChild;
        while (HasLChild(s)) s = s->lChild;
    } else{
        while (IsRChild(s)) s = s->parent;
        s = s->parent;
    }
    return s;
}
posted on   未雨愁眸  阅读(192)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示