欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 05-5.3.2_3 在线索二叉树中找前驱后继

05-5.3.2_3 在线索二叉树中找前驱后继

2024/10/24 10:15:03 来源:https://blog.csdn.net/G2Esports_NiKo/article/details/139752640  浏览:    关键词:05-5.3.2_3 在线索二叉树中找前驱后继

👋 Hi, I’m @Beast Cheng
👀 I’m interested in photography, hiking, landscape…
🌱 I’m currently learning python, javascript, kotlin…
📫 How to reach me --> 458290771@qq.com


喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

中序线索二叉树找中序后继

在中序线索二叉树中找到指定结点 *p中序后继 next

  1. p->rtag == 1,则 next = p->rchild
  2. p->rtag == 0,则 p 必有右孩子,next 就是 p 的右子树中,最左下角的结点mkkkkkkkkkkkkkkkk
// 找到以 p 为根的子树中,第一个被中序遍历的结点
ThreadNode *Firstnode(ThreadNode *p){// 循环找到最左下结点(不一定是叶子结点)while(p->ltag == 0) p = p->lchild;return p;
}// 在中序线索二叉树中找到结点 p 的后继结点
ThreadNode *Nextnode(ThreadNode *p){// 右子树中最左下结点if(p->rtag == 0) return Firstnode(p->rchild);else return p->rchild;  // rtag == 1直接返回后继线索
}// 对中序线索二叉树进行中序遍历(利用线索实现的非递归算法)
void Inorder(ThreadNode *T){for(ThreadNode *p = Firstnode(T); p != NULL; p = Nextnode(p)) visit(p);
}

先序线索二叉树

找先序后继

在先序线索二叉树中找到指定结点 *p先序后继 next

  1. p->rtag == 1 ,则 next = p->rchild
  2. p->ratg == 0
    ……

找先序前驱

在先序线索二叉树中找到指定结点 *p先序前驱 pre

  1. p->ltag == 1 ,则 pre = p->lchild
  2. p->latg == 0
    先序遍历中,左右子树中的结点只可能是根的后继,不可能是前驱
  3. 如果能找到p的父结点,且p是左孩子——p的父结点即为其前驱
  4. 如果能找到p的父结点,且p是右孩子,其左兄弟为空——p的父结点即为其前驱
  5. 如果能找到p的父结点,且p是右孩子,其左兄弟非空——p的前驱为 左兄弟子树中 最后一个被先序遍历的结点

后序线索二叉树

找后序前驱

在后序线索二叉树中找到指定结点 *p后序前驱 pre

  1. p->ltag == 1 ,则 pre = p->lchild
  2. p->latg == 0, p必有左孩子
    • 若p有右孩子,则后序前驱为 右孩子
    • 如果p没有右孩子,则后序前驱为 左孩子

找后序后继

在后序线索二叉树中找到指定结点 *p后序后继 next

  1. p->rtag == 1 ,则 next = p->rchild
  2. p->ratg == 0, p必有右孩子
    后序遍历中,左右子树中的结点只可能是根的前驱,不可能是后继

该用三叉链表可以找到父结点

  1. 如果能找到 p 的父结点,且 p 是右孩子——p 的父结点即为其后继
  2. 如果能找到 p 的父结点,且 p 是左孩子,其右兄弟为空——p 的父结点即为其后继
  3. 如果能找到 p 的父结点,且 p 是左孩子,其右兄弟非空——p 的后继为 右兄弟子树中 第一个被后序遍历的结点
  4. 如果 p 是根结点,则 p 没有后序后继

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com