为什么完全二叉树一定是平衡二叉树吗不用p=p->lchild?

线索二叉树:在二叉树的基础上,为节点添加LTag和RTag标记,用于指示左指针和右指针指向的是左右孩子,或者是前驱后继节点。

知道了各节点的前驱和后继节点后,可以让线索二叉树实现类似双向链表的效果,方便遍历。

  1. 如果LTag等于Link时表示左指针指向左孩子,等于Thread表示左指针指向前驱节点;
  2. 如果RTag等于Link表示右指针指向右孩子,等于Thread表示右指针指向后继节点。

前驱节点示意图.png

后继节点示意图.png

线索二叉树示意图.png

  • 一、 概念 二叉树按照先序、中序、后续遍历的方法形成一个线性序列后,每个结点(除第一个和最后一个外),都有且仅有一...

  • 原链接:理解线索二叉树|CloudWong 线索二叉树原理 遍历二叉树的其实就是以一定规则将二叉树中的结点排列成一...

  • 1 前言 在上一篇简单二叉树的学习中,初步介绍了二叉树的一些基础知识,本篇文章将重点介绍二叉树的一种变形——线索二...

  • 数据结构与算法--线索二叉树及其前序、中序遍历 二叉树如果某个结点没有左孩子或右孩子,则这个域就为空。如node....

  • 我在淀浦河畔散步, 这儿阳光热烈,微风拂面, 好似在欢迎每一位过客。/ 我一路向东,与碧水同行, 脚...

  • 新手引导 = 行为树 + Lua + 配置(lua.table)在当前项目中,采用的是代码写死节点方式,来实现新手...

  • 昨晚在家偶尔看到电视剧《我的老婆是80后》,剧情正发展到女主因为男主从小到大的女性朋友而醋意大发。 男主说了一句,...


  • 数据结构习题-树-简答题 <编程 编程学习 IT料理>


    1. 二叉树由(1)(2)(3)三个基本单元组成。
    2. 树在计算机内的表示方式有(1)(2)(3)
      (1)双亲链表表示法(2)孩子链表表示法(3)孩子兄弟表示法
    3. 二叉树中某一结点左子树的深度减去右子树的深度称为该结点的____。
    4. 具有 256 个结点的完全二叉树的深度为______。
    5. 假设根结点的层数为1,具有n个结点的二叉树的最大高度是______
    6. 在一棵二叉树中,度为零的结点的个数为 N0,度为 2 的结点的个数为 N2,则有 N0 =______
    7. 高度为 8 的完全二叉树至少有______个叶子结点。
    8. 已知二叉树有 50 个叶子结点,则该二叉树的总结点数至少是______
    9. 一个有 2001 个结点的完全二叉树的高度为______。
    10. 8 层完全二叉树至少有______个结点,拥有 100 个结点的完全二叉树的最大层数为______
    11. 含 4 个度为 2 的结点和 5 个叶子结点的二叉树,可有______个度为 1 的结点。
      0至多个。任意二叉树,度为1的结点个数没限制。只有完全二叉树,度为1的结点个数才至多为1。
    12. 现有按中序遍历二叉树的结果为 abc,问有(1)种不同的二叉树可以得到这一遍历结果,这些二叉树分别是_(2)
    13. 利用树的孩子兄弟表示法存储,可以将一棵树转换为______。
    14. 具有 n 个结点的满二叉树,其叶结点的个数是______。
      带权路径长度最小的二叉树,又称最优二叉树
    15. 若以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是______。
    16. 有一份电文中共使用 6 个字符:a,b,c,d,e,f,它们的出现频率依次为 2,3,4,7,8,9,试构造一棵哈夫曼树,则其加权路径长度 WPL 为(1),字符 c 的编码是(2)
    17. 设 n0 为哈夫曼树的叶子结点数目,则该哈夫曼树共有______个结点。
    18. 从概念上讲,树,森林和二叉树是三种不同的数据结构,将树,森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。
      树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,只是解释不同,也就是说树(树是森林的特例,即森林中只有一棵树的特殊情况)可用二叉树唯一表示,并可使用二叉树的一些算法去解决树和森林中的问题。
      树和二叉树的区别有三:一是二叉树的度至多为2,树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下, 也必须指出是左子树还是右子树,树无此限制;三是二叉树允许为空,树一般不允许为空(个别书上允许为空)。
    19. 请分析线性表、树的主要结构特点,以及相互的差异与关联。
      线性表属于约束最强的线性结构,在非空线性表中,只有一个“第一个”元素,也只有一个“最后一个”元素;除第一个元素外,每个元素有唯一前驱;除最后一个元素外,每个元素有唯一后继。树是一种层次结构,有且只有一个根结点,每个结点可以有多个子女,但只有一个双亲(根无双亲),从这个意义上说存在一(双亲)对多(子女)的关系。
    20. 求含有 n 个结点、采用顺序存储结构的完全二叉树中的序号最小的叶子结点的下标。要求写出简要步骤。
      根据完全二叉树的性质,最后一个结点(编号为n)的双亲结点的编号是[n/2](向下取整),这是最后一个分枝结点,在它之后是第一个终端(叶子)结点,故序号最小的叶子结点的下标是[n/2](向下取整)+1。
    21. 设有正文 AADBAACACCDACACAAD,字符集为 A,B,C,D,设计一套二进制编码,使得上述正文的编码最短。
      27.设 T 是一棵二叉树,除叶子结点外,其它结点的度数皆为 2,若 T 中有 6 个叶结点,试问:
      (2)T 树中共有多少非叶结点?
      (3) 若叶结点的权值分别为 1,2,3,4,5,6。请构造一棵哈曼夫树,并计算该哈曼夫树的带权路径长度wpl。
      (1)T树的最大深度Kmax=6(除根外,每层均是两个结点)
      T树的最小深度Kmin=4(具有6个叶子的完全二叉树是其中的一种形态)
      (2)非叶子结点数是5。(n2=n0-1)
      (3)哈夫曼树见下图,其带权路径长度wpl=51



    前几天刚学到二叉树,然后我就自己想着如何使用我最爱的C语言创建一棵完全二叉树

    空的队列(头节点不储存数据)

    非空队列(头节点不储存数据)

    删除节点,即从队列中取出数据

    用户每输入一个非0(NoInfo)数据,我们都malloc一个QueueNode类型的节点来储存数据,并把存入队列中,用QueueNode类型的节点来保存数据,并更改Q里面的数据,然后就是把这个数据插入到二叉树里面。再从队列中取出来一个数据,将接下来输入的两个数据分别同样malloc一个QueueNode类型的节点来存放数据,并把它存入队列中,然后把这两个数据插入取出的这个节点的左右孩子里面

    下面就是完全二叉树的具体的创建过程,用户输入0时创建结束

    再来个层序遍历遍历完全二叉树,层序遍历也用到了队列

    我要回帖

    更多关于 三星gt19152p 的文章

     

    随机推荐