线索二叉树(存储结构,线索化,寻找前驱/后继)

编程入门 行业动态 更新时间:2024-10-28 19:30:48

<a href=https://www.elefans.com/category/jswz/34/1769924.html style=线索二叉树(存储结构,线索化,寻找前驱/后继)"/>

线索二叉树(存储结构,线索化,寻找前驱/后继)

目录

  • 1.线索二叉树
    • 1.中序线索二叉树
    • 2.后序线索二叉树
    • 3.先序线索二叉树
  • 2.线索二叉树的存储结构
  • 3.二叉树的线索化
    • 1.中序线索化
    • 2.先序线索化
    • 3.后序线索化
  • 4.寻找前驱/后继
    • 1.中序线索二叉树找后继
    • 2.中序线索二叉树找中序前驱
    • 3.先序线索二叉树找先序后继
    • 4.先序线索二叉树找先序前驱
    • 5.后序线索二叉树找后序前驱
    • 6.后序线索二叉树找后序后继

1.线索二叉树

为了解决普通二叉树遍历,寻找前驱或者后继不方便的问题,引入了线索二叉树。
n个结点的二叉树,有n+1个空链域,可用来记录前驱、后继的信息。
指向前驱、后继的指针称为‘线索”

1.中序线索二叉树

中序线索二叉树――线索指向中序前驱、中序后继.
左孩子指针指向前驱线索
右孩子指针指向后继线索

2.后序线索二叉树

后序线索二叉树――线索指向后序前驱、后序后继。

3.先序线索二叉树

先序线索二叉树――线索指向先序前驱、先序后继.

2.线索二叉树的存储结构

tag == 0,表示指针指向孩子
tag == 1,表示指针是“线索

3.二叉树的线索化

1.中序线索化

2.先序线索化

会出现转圈问题。当ltag==0时,才能对左子树先序线索化.

3.后序线索化

4.寻找前驱/后继

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

若右指针没有被线索化,找右子树中最左下结点

2.中序线索二叉树找中序前驱

若左指针没有被线索化,找左子树中最右下结点

3.先序线索二叉树找先序后继

若右指针没有被线索化:
①若结点p有左孩子,则先序后继为左孩子;
②若结点p没有左孩子,则先序后继为右孩子。

4.先序线索二叉树找先序前驱

若左指针没有被线索化,先序遍历中,左右子树中的结点只可能是根的后继,不可能是前驱。

改用三叉链表可以找到父节点的情况:
如果能找到p的父节点,且p是左孩子,p的父节点即为其前驱。
如果能找到p 的父节点,且p是右孩子,其左兄弟为空,p的父节点即为其前驱。
如果能找到p的父节点,且p是右孩子,其左兄弟非空,p的前驱为左兄弟子树中最后一个被先序遍历的结点。
如果p是根节点、则p没有先序前驱

5.后序线索二叉树找后序前驱

若左指针没有线索化的情况:
①若p有右孩子,则后序前驱为右孩子。
②若p没有右孩子,则后序前驱为左孩子。

6.后序线索二叉树找后序后继

若右指针没有被线索化:后序遍历中,左右子树中的结点只可能是根的前驱,不可能是后继。

改用三叉链表可以找到父结点:
如果能找到p的父节点,且p是右孩子,p的父节点即为其后继。
如果能找到p 的父节点,且p是左孩子,其右兄弟为空,p的父节点即为其后继。
如果能找到p的父节点,且p是左孩子,其右兄弟非空,p的后继为右兄弟子树中第一个被后序遍历的结点。
如果p是根节点,则p没有后序后继

更多推荐

线索二叉树(存储结构,线索化,寻找前驱/后继)

本文发布于:2023-11-15 05:53:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1594791.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:线索   前驱   结构   二叉树

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!