当前位置:   article > 正文

数据结构笔记——线索二叉树找前驱/后继_中序线索二叉树找前驱后继

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

目录

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

二、中序线索二叉树中找中序前驱

三、先序线索二叉树找先序后继

四、先序线索二叉树找先序前驱

五、后序线索二叉树找后序前驱

六、后序线索二叉树找后序后继

七、总结

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

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

①若p->rtag == 1,则next = p->rchild

②若p->rtag == 0

  1. //找到以P为跟的子树中,第一个被中序遍历的结点
  2. ThreadNode *Firstnode(ThreadNode *p){
  3. //循环找到最左下结点(不一定是叶子结点)
  4. while(p->ltag == 0)
  5. p = p->lchild;
  6. return p;
  7. }
  8. //在中序线索二叉树中找到结点p的后继结点
  9. ThreadNode *Nextnode(ThreadNode *p){
  10. //右子树中最左下结点
  11. if(p->rtag == 0)
  12. return Firstnode(p->rchild);
  13. else
  14. return p->rchild;
  15. }
  16. //对中序线索二叉树进行中序遍历(利用线索实现的非递归算法) 空间复杂度O(1)
  17. void Inorder(ThreadNode *T){
  18. for(ThreadNode *p = Firstnode(T);p != NULL; p = Nextnode(p))
  19. visit(p);
  20. }

二、中序线索二叉树中找中序前驱

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

①若p->ltag == 1,则pre = p->lchild

②若p->ltag == 0

  1. //找到以P为跟的子树中,最后一个被中序遍历的结点
  2. ThreadNode *Lastnode(ThreadNode *p){
  3. //循环找到最右下结点(不一定是叶子结点)
  4. while(p->rtag == 0)
  5. p = p->rchild;
  6. return p;
  7. }
  8. //在中序线索二叉树中找到结点p的前驱结点
  9. ThreadNode *Prenode(ThreadNode *p){
  10. //左子树中最右下结点
  11. if(p->ltag == 0)
  12. return Lastnode(p->lchild);
  13. else
  14. return p->lchild;
  15. }
  16. //对中序线索二叉树进行中序遍历(利用线索实现的非递归算法) 空间复杂度O(1)
  17. void RevInorder(ThreadNode *T){
  18. for(ThreadNode *p = Lastnode(T);p != NULL; p = Prenode(p))
  19. visit(p);
  20. }

三、先序线索二叉树找先序后继

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

①若p->rtag == 1,则next = p->rchild

②若p->rtag == 0

四、先序线索二叉树找先序前驱

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

①若p->ltag == 1,则next = p->lchild

② 若p->ltag = 0

前提:改用三叉链表可以找到父节点

①如果能找到p的父节点,且p是左孩子

②如果能找到p的父节点,且p是右孩子,其左兄弟为空

③如果能找到p的父节点,且p是右孩子,其左兄弟非空

④如果p是根结点,则p没有先序前驱

五、后序线索二叉树找后序前驱

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

①若p->ltag == 1,则pre = p->lchild

②若p->ltag == 0

六、后序线索二叉树找后序后继

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

①若p->rtag == 1,则next = p->rchild

②若p->rtag == 0

前提:改用三叉链表可以找到父节点

①如果能找到p的父节点,且p是右孩子

②如果能找到p的父节点,且p是左孩子,且右兄弟为空

③如果能找到p的父节点,且p是左孩子,且右兄弟非空

④如果p是根节点,则p没有后序后继

七、总结

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/650689
推荐阅读
相关标签
  

闽ICP备14008679号