广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言线索二叉树结构怎么实现
  • 498
分享到

C语言线索二叉树结构怎么实现

2023-06-30 10:06:43 498人浏览 泡泡鱼
摘要

这篇文章主要讲解了“C语言线索二叉树结构怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言线索二叉树结构怎么实现”吧!线索二叉树的意义对于一个有n个节点的二叉树,每个节点有指向左右

这篇文章主要讲解了“C语言线索二叉树结构怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言线索二叉树结构怎么实现”吧!

    线索二叉树的意义

    • 对于一个有n个节点的二叉树,每个节点有指向左右孩子的指针域。其中会出现n+ 1个空指针域,这些空间不储存任何事物,浪费着内存的资源。

    • 对于一些需要频繁进行二叉树遍历操作的场合,二叉树的非递归遍历操作过程相对比较复杂,递归遍历虽然简单明了,但是会有额外的开销,对于操作的时间和空间都比较浪费。

    • 我们可以考虑利用这些空地址,存放指向节点在某种遍历次序下的前驱和后继节点的地址。通过这些前驱和后继节点的地址可以知道,从当前位置下一步应该走向哪里。

    线索二叉树的定义

    • 指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树就称为线索二叉树。

    • 对二叉树以某种次序遍历使其变为线索二叉树的过程称为线索化。

    线索二叉树结构的实现

    二叉树的线索存储结构

    为了区分二叉树某一节点是指向它的孩子节点还是指向前驱或者后继节点,我们可以在每个节点增设两个标志,Ltag,Rtag.

    其中:

    • Ltag为0时,代表该节点指向它的左孩子,Ltag为1时,代表该节点指向它的前驱节点。

    • Rtag为0时,代表该节点指向它的右孩子,Rtag为1时,代表该节点指向它的后继节点。

    所以,线索二叉树结构定义代码如下:

    typedef char BTDataType;typedef enum{Link,Thread}PointerTag;//Link 是0,Thread 是1。typedef struct BinaryTreenode{struct BinaryTreeNode* left;struct BinaryTreeNode* right;PointerTag LTag ;PointerTag RTag;BTDataType data;}BTNode;

    二叉树的中序线索化

    线索化的过程就是在遍历过程中修改空指针的过程

    C语言线索二叉树结构怎么实现

    以上二叉树中序遍历可以得到:

      D B E A F C
      D的前驱是空,后继是B
      B的前驱是D,后继是E
      E的前驱是B,后继是A
      F的前驱是A,后继是C
      C的前驱是F,后继是空

    线索化后:

    C语言线索二叉树结构怎么实现

    中序遍历线索化的递归函数代码如下:

    //中序线索化BTNode* pre = NULL;void InThreading(BTNode* p){if (p == NULL) return;InThreading(p->left);//递归左子树线索化if (!p->left)//左孩子为空,left指针指向前驱{p->LTag = Thread;p->left = pre;}if (pre!=NULL && !pre->right)//右孩子为空,right指针指向后继指针。//这里判断 pre!=NULL 是因为线索化中序遍历的第一个节点(节点D)时,它并没有前驱节点,此时的pre仍然是NULL。{pre->RTag = Thread;pre->right = p;}pre = p;//保持pre指向p的前驱InThreading(p->right);}

    分析:

    • if (!p->left)表示如果某节点的左指针域为空,因为其前驱节点刚刚访问过,并且赋值给了pre,所以可以将pre赋值给 l -> left,并且修改 p-> LTag = Thread,以完成前驱节点的线索化。

    • pre 是 p 的前驱,那么, p 就是 pre 的后继。当pre -> right 为空时,就可以将p赋值给 pre -> right , 并且修改 pre -> RTag = Thread。

    线索二叉树的中序遍历

    void MidOrder(BTNode*p){while (p != NULL){while (p->LTag == Link)//{p = p->left;}printf("%c ",p->data);while (p->RTag == Thread && p->right != p){p = p->right;printf("%c ", p->data);}p = p->right;}return;}

    分析:

    • while (T->ltag == Link)从根节点开始遍历,如果左标记是Link让它一直循环下去,直到找到标记为Thread的的结点,也就是要遍历的第一个结点,然后根据后驱指针找到后继结点

    • 后面就是重复以上过程,直到遍历完整个二叉数。

    感谢各位的阅读,以上就是“C语言线索二叉树结构怎么实现”的内容了,经过本文的学习后,相信大家对C语言线索二叉树结构怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: C语言线索二叉树结构怎么实现

    本文链接: https://www.lsjlt.com/news/328121.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C语言线索二叉树结构怎么实现
      这篇文章主要讲解了“C语言线索二叉树结构怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言线索二叉树结构怎么实现”吧!线索二叉树的意义对于一个有n个节点的二叉树,每个节点有指向左右...
      99+
      2023-06-30
    • C语言实现二叉搜索树的完整总结
      目录1、 二叉树的构建2、二叉树的遍历前序遍历中序遍历后序遍历层序遍历4、二叉树的高度5、二叉树的删除6、由几种遍历序列还原二叉树 前序序列、中序序列还原二叉树:中序序列、...
      99+
      2022-11-12
    • C语言线索二叉树基础解读
      目录线索二叉树的意义线索二叉树的定义线索二叉树结构的实现二叉树的线索存储结构二叉树的中序线索化线索二叉树的中序遍历总结线索二叉树的意义 对于一个有n个节点的二叉树,每个节点有指向左右...
      99+
      2022-11-13
    • C语言数据结构之二叉链表创建二叉树
      目录一、思想(先序思想创建)二、创建二叉树(1)传一级参数方法(2)传二级参数方法一、思想(先序思想创建) 第一步先创建根节点,然后创建根节点左子树,开始递归创建左子树,直到递归创建...
      99+
      2022-11-13
    • Java数据结构之线索化二叉树怎么实现
      这篇文章主要介绍“Java数据结构之线索化二叉树怎么实现”,在日常操作中,相信很多人在Java数据结构之线索化二叉树怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之线索化二叉树怎么实现...
      99+
      2023-06-30
    • C语言堆与二叉树的顺序结构与实现
      目录一. 二叉树的顺序结构二. 堆的概念及结构三. 堆的实现四. 堆排序(具有缺陷型)一. 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全...
      99+
      2022-11-13
    • C语言数据结构之二叉树详解
      目录1. 树概念及结构1.1树概念1.2树的表示2. 二叉树概念及结构2.1概念2.2数据结构中的二叉树2.3特殊的二叉树2.4二叉树的存储结构2.5二叉树的性质3. 二叉树顺序结构...
      99+
      2022-11-13
    • C语言二叉树的概念结构详解
      目录1、树的概念及结构(了解)1.1树的概念:1.2树的表示法:2、二叉树的概念及结构2.1二叉树的概念2.2特殊的二叉树2.2二叉树的性质2.3二叉树的顺序存储2.4二叉树的链式存...
      99+
      2022-11-13
      C语言二叉树 C语言二叉树的创建
    • C++数据结构之搜索二叉树的实现
      目录零.前言1.概念2.作用3.迭代实现(1)查找(2)插入(3)删除4.递归实现(1)查找(2)插入(3)删除5.key/value模型的应用(1)对应查找(2)判断出现次数6.总...
      99+
      2022-11-13
    • C语言实例实现二叉搜索树详解
      目录有些算法题里有了这个概念,因为不知道这是什么蒙圈了很久。 先序遍历: root——>left——>right 中序遍历...
      99+
      2022-11-13
    • C语言中如何利用递归实现线索二叉树
      这篇“C语言中如何利用递归实现线索二叉树”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中如何利用递归实现线索二叉树”文...
      99+
      2023-06-17
    • C语言数据结构系列篇二叉树的概念及满二叉树与完全二叉树
      链接:C语言数据结构系列之树的概念结构和常见表示方法 0x00 概念 定义:二叉树既然叫二叉树,顾名思义即度最大为2的树称为二叉树。 它的度可以为 1 也可...
      99+
      2022-11-13
    • C语言链式二叉树结构原理是什么
      这篇文章主要介绍“C语言链式二叉树结构原理是什么”,在日常操作中,相信很多人在C语言链式二叉树结构原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言链式二叉树结构原理是什么”的疑惑有所帮助!接下来...
      99+
      2023-06-25
    • C语言 链式二叉树结构详解原理
      目录前言二叉树节点声明二叉树的遍历构建二叉树1.前序遍历2.中序遍历3.后序遍历二叉树节点的个数二叉树叶子节点的个数二叉树第K层节点个数二叉树的高度/深度二叉树查找值为x的节点整体代...
      99+
      2022-11-12
    • Java数据结构之线索化二叉树的实现
      目录1.线索化二叉树的介绍2.线索化二叉树的基本特点3.线索化二叉树的应用案例4.前序线索化二叉树、遍历5.后序线索化二叉树1.线索化二叉树的介绍 将数列 {1, 3, 6, 8, ...
      99+
      2022-11-13
    • C语言中二叉查找树怎么实现
      本文小编为大家详细介绍“C语言中二叉查找树怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中二叉查找树怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。二叉查找树性质1、二叉树每个树的节点最多有...
      99+
      2023-06-16
    • C语言植物大战数据结构二叉树堆
      目录前言堆的概念创建结构体初始化结构体销毁结构体向堆中插入数据1.堆的物理结构和逻辑结构2.完全二叉树下标规律3.插入数据思路依次打印堆的值删除堆顶的值判断堆是否为空求堆中有几个元素...
      99+
      2022-11-13
    • C语言数据结构二叉树递归的方法
      本篇内容介绍了“C语言数据结构二叉树递归的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、二叉树的遍历算法二叉树的精髓在于遍历。遍历掌...
      99+
      2023-06-30
    • C++数据结构之二叉搜索树的实现详解
      目录前言介绍实现节点的实现二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除总结前言 今天我们来学一个新的数据结构:二叉搜索树。 介绍 二叉搜索树也称作二叉排序树,它具有以下性质: 非...
      99+
      2022-11-13
    • C语言二叉树的链式存储结构是怎样的
      本文小编为大家详细介绍“C语言二叉树的链式存储结构是怎样的”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言二叉树的链式存储结构是怎样的”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。二叉树的链式存储结构是指用...
      99+
      2023-06-29
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作