数据结构 树、二叉树、哈夫曼树、森林

特点:不是线性结构,一个直接前驱,可能有多个直接后继 

d06786888ee749c6a4561eed66db7633.jpg

一、案例引入


  • 数据的压缩问题

找到代码长度最短的编码方案

  • 等价问题 

现实世界中许多应用问题可以归结为按给定的等价关系将集合划分为等价类的问题。

例:要测试一个软件是否存在问题,这个软件所有允许的输入数据构成的集合通常有很多元素。把软件所有允许的输入数据域划分成若干子集合,即等价类。然后从每个子集合中选取少数具有代表性的数据作为测试用例,这样的测试用例设计方法可以有效地避免大量的冗余测试。

并查算法是确定等价类的高效算法。

二、树的基本概念


  • 0c5d21792aed44d285caf5d027fef44f.jpg
  • 树是有n个结点组成的有限集合
  • 结点:树中的一个独立单元,包含一个数据元素及若干指向其子树的分支。
  • 空数是n为0的树
  • 根节点是无直接前驱的结点
  • 叶子结点或者叶结点是无直接后继结点,也是度为0的结点,也称作终端结点           

      eg.如K,L,F,J,H,G,M,N结点都是叶子结点。

54e6f8ba132d4998843d58c9e793c237.jpg

 

  • 分支结点是度不为0的结点,也称作非终端结点                                                         

      eg.如A,B、I等结点是分支结点。

  • 兄弟结点是具有共同双亲结点的结点

        eg.B、C,D互为兄弟,M,N互为兄弟。

2ce77aa5675846bbbd05495be2c8088d.jpg

  • 双亲结点是该结点的直接前驱结点

          eg.如B的双亲是A,N的双亲是l。

  • 孩子结点是该结点的直接后继结点     

         eg.如B是A的孩子,N是I的孩子。

  • 祖先结点:从根结点开始到该结点连线上的所有结点(除该结点)都是该结点的祖先。

          eg.N的祖先是I,C,A。

32f8e247a45146819ed227b45bc26a97.jpg

 

  • 子孙结点是该结点的直接后继结点和间接后继结点
  • 子孙:一棵树上的任何结点(不包括根结点)称为根的子孙。

        eg.如图中其它结点都是根结点A的子孙。

  • 结点的度是该结点拥有子树的个数            

           eg.A的度为3,E的度为2。

  • 树的度是树中所有结点的度的最大值       

           eg.树的度为3。

  • 结点的层次是任一结点的层次等于双亲结点的层次加1,根结点为第1层。
  • 树的深度(或高度)是树中所有结点的层次的最大值。
  • 无序树是树中任意一个结点的各孩子结点之间的次序构成无关紧要的树(即结点各子树可互换位置)
  • 有序树是树中任意一个结点的各孩子结点有严格排列次序的树(即结点各子树从左至右有序,不能互换)
  • 森林是 m (m≥0)棵互不相交树的集合
  • 树和森林的概念相近,删去一棵树的根,就得到一个森林;反之,加上一个结点作树根,森林就变为一棵树。

  • 树的性质

  • 树中的结点数等于树中所有结点的度数之和加
  • 度为m 的树中第i层至多有 m的(i-1)次方个结点(i>=1)
  • dfcc7dee58c0494589287398ef6f39a4.jpg

 树的表示方法

树结构的定义是一个递归的定义,也就是说,
在树的定义中又用到了树的定义。它给出了树的固有特性。

     树的主要表示法

  • 直观表示法(树形图表示法)
  • 嵌套集合表示法
  • 广义表表示法
  • 凹入表示法

0d02cc592bd64f8ea6260a982f4bce28.jpg

 最直观的表示方法,也是最常用的

55c2eed593784af889b9e0d3bfed5ea5.jpg

在嵌套集合中,任意两个集合或者不相交,或者一个包含另一个 

d284a6bd68394030993a640c1a004636.jpg

与书目类似,用位置的缩进表示树的层次

c6ba0feb786a4ef081ef671687a408bb.png 826e5b380cc241f9bf09698d552d987d.png

 bd2e2cdfeacd4459927a57a8e41a46c1.jpeg

2a5ba8a994604d2191c4c210015504d1.jpeg

 af19062d1f3147a19ca9c726c0b75efc.png

1.双亲表示法

用一组连续的空间存储树中的结点,每个结点除了数据域data外还附设一个伪指针parent域,指示双亲结点位置

2a461bddcfff4a4885b80edee521809c.jpeg 9c9bcb82e00f468c9874c73ac91bb459.jpeg

 结点形式                            一棵树及其双亲表示法的存储结构。

                                            根结点的下标为0,伪指针域为-1

该存储结构利用了每个结点(根结点除外)只有唯一双亲的性质。在这种存储结构下,可以很方便地找到每个结点的双亲结点,但求某个结点的孩子结点时需要遍历整个结构。

 14f4ce1ae8d64af4ad5111fd7b21ffe6.jpeg

59636c384cd446a78d853f80032d9c2c.jpeg

 c3ee6d7ad18240bdbd3b798b1c041367.jpeg1dc188d4a3f5475eae959bd34d0ad6e0.jpeg

f1cab258bea542a597538d9fe0598e34.jpeg

9d7a17e24b024e479ae61774fab60b6e.png 85ee1fb5b08246d2b2b3ac17461c9e15.jpg

eb770fa2a01842908b65896aae121d1a.jpg

26c9d1058d4849d2b4f65cddd76341c1.jpg d55939f5d453444785fadb1fa28b47c2.jpg

a0bc33cc6ae94df798062f45b80eb40d.jpg52c0f05bdbc94ea694faba92472d1719.jpgda5f6fba5f3349c2b2cc8384b3fa5a5c.jpg 6a504fa7c045485495d45c41e9565a20.jpg 0a9fcd2c656c4ab28205569009bab909.jpg

 88e3c2ba75234f72971767a2afc2535f.png

587d65fe32fd4864afde67c993c1be0a.pngbf9552e07e7e4b7eb29b4d531f5d5170.png 

af4174199493443ca7e550bc48258406.png 

48fca97b40c24344a382cc6468c85f9b.png ac69bc701e70497d965ed8f586077087.png

4b13190444354a57977bf45cc145a7e9.pngf827355d39f84dae9a667c2525510289.png 

16c10ef446564c47be04d4b6793f0041.png 

2e829b98594f4651b7f597dd9abf424f.pngf40e487f1ad64d40a8860019fea122b2.png

28f9287e4ab24bb2ba6f391b99b9320a.png4aba2fcedc54451382345d664468eb06.png6112931632214d2ca68c9a232d8013cb.png

f39e4b60e96643b99673d30b3c125b35.png

69a58370d1774cb6b2fe1225cf914436.png 

970a5e8f0ba3407ca18d6c003fdbeee1.png7ffe16c70e364d149dfbf7f0e77f4794.png 

3f6068c6beae47aaa958bc5381c459d7.png 

8b2d3e7c3a304eb19c8e3fa899a9a707.png 

514cbb0f8c274f16a959742504532af6.png 

7fbd75add06043608f0b33fd7b25ee47.png 

60db2cbb5168437a91d0e15ad42caf7e.png 

2e93f4c389694a90a03cfa3833044384.png 

84ff3b2b6cbc4c12af519f73d1d8c65b.png 

ed139f18a64c4af9b6af56535a95fd83.pngc00e7b78d4ea4b91af867f7ad8741ee2.pngb578a72103634867b8fe6832dc25e5d2.pnga15a518a4adc43fda8ae67c2e7cac46d.pnga8a4350cbba742968e321692729f127c.png

哈夫曼树

28a8023cd0384eb49dd315ca308998d2.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                    

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值