小白基础之数据结构------二叉树

概述:过了个年,就像喝了碗孟婆汤,什么都忘得一干二净。打算先从数据结构开始,逐步拾起丢失的记忆。我看的是我们学校自己写的数据结构书,以前感觉不咋样,现在一看感觉也是一本不错的书。我认为的不错是它把一些概念讲的特别详细,关键是通俗易懂。举个例子,你在看书时,会对一些概念产生疑问,如果不解决这个疑问,可能很难再继续读下去。这本书就是当你产生疑问,接下来的内容就是解决你心中的疑问的。所以看着很舒服。我认为,写书的作者应该把自己当做一个初学者,以初学者的思路去写。所以这也体现了好老师的重要性,老师也同样如此。因为老师是眼界比较开阔的,它如果以教授的眼界看我们的问题哪有什么难点,熟不知我们都一脸茫然,就跟你看你弟的小学作业题一样,“卧槽,这题这么简单你都不会”。其实是每个人的知识域不一样而已。

废话少说,下面我说下有关二叉树的知识,全都是最最基础的概念,不包含任何代码,因为我有时候发现,我都不知道这是啥东西,你就跟我谈代码,先了解这到底是啥吧。


树是树形结构的简称,是一种经典的非线性结构。树形结构的逻辑特征:有且仅有一个开始结点,若干个终端结点,其余的内部结点都有且仅有一个前趋结点,若干个后继结点。

在树中,有且仅有一个开始结点,称为根结点;若干个终端结点称为叶结点;除根外的其余所有结点都有且仅有一个前趋,称为该结点的父(双亲)结点;若干个后继结点称为该结点的子(孩子)结点;双亲相同的结点互称为兄弟

通常,设根结点的层数为1,子结点的层数为父结点层数加1,而树中层数最大的结点的层数定义为树的高度或树的深度

一个结点字数的个数称为该结点的度,树中度最大的结点的度数称为该树的度

森林是m(m>=0)棵互不相交的树的集合。树和森林的概念有直接的关系:一棵树除去根结点,就会得到一个由所有子树组成的森林。

二叉树

性质1:二叉树第i层上最多有2^{i-1}(i>=1)个结点。

性质2:深度为k的二叉树最多有2^{k}-1(k>=1)个结点。

性质3:在任意一棵二叉树中,若度为0的结点个数为n_{0} ,度为2的结点数为n_{2},则n_{0}=n_{2}+1 。

性质4:具有n个结点的完全二叉树的深度为\sqsubseteq log_{2}n\sqsupseteq +1 或log_{2}(n+1)取上限。

性质5:对于一棵完全二叉树,若结点i,则其左孩子为2i,右孩子为2i+1。

每层结点数都达到最大值的二叉树称为满二叉树

 

除最下面一层外,其余各层的结点数都达到最大值,并且最下一层的结点都从该层最左边的位置开始连续排放,则称此二叉树为完全二叉树



二叉树的存储

最常用的两种存储方法是顺序存储和链接存储。

1.顺序存储

2.链接存储

单链表是每个结点附加一个指针域表示后继关系,同样的设计思想也可以用于二叉树,通过附加指针域表示后继关系。二叉树中每个结点最多有两个后继,因此每个结点除了存储本身的数据外,需要附加两个指针域分分别指向左孩子、右孩子,这就是二叉链表。有时为了运算方便,每个结点再附加一个指针域指向双亲结点,即带父指针的二叉链表,也称为三叉链表

线索二叉树

在含有n个结点的二叉链表中,有n+1个空指针域。利用这些空指针域是的二叉树上的运算效率的以提高。

二叉链表存储结构上最重要的运算就是遍历,时间复杂度都是O(n),因为每个结点都要访问一次。空间复杂度是常量级的吗?显然不是,因为饿其中需要辅助栈的空间。从实现算法可以分析出,辅助栈的空间大小取决于树的高度,因为最好情况是完全二叉树,空间复杂度是O(log_{2}n),最坏是左单支树,空间复杂度是O(n),综合平均空间复杂度是O(log_{2}n)。如果能充分利用二叉链表中的n+1个空指针域来代替辅助栈的空间,就能使算法的空间复杂度降为O(1),提高运算的效率。

当结点的左指针域为空时,用它的左指针域存放该结点在某种遍历次序下的前趋结点的指针,即“左空指前趋”;当结点的右指针域为空时,用它的右指针域存放该结点在某种遍历次序下的后继结点的指针,即“右空指后继”;指向前趋或后继的指针称为线索,加上线索的二叉树称为线索二叉树。二叉树的遍历有三种次序,所以线索也有三种,即前序线索、中序线索、后序线索。

这样一来,二叉链表中某个结点的指针域可能存储的是左、右孩子结点的指针,也可能存储的是前趋和后继结点的指针(线索)。为了区分是孩子指针还是线索,需要对每个指针域再附加一个标志,当指针域中存放的是孩子指针时,标志为0;当指针域中存放的是线索时,标志为1.

一个结点是叶子结点的充要条件为:它的左、右标志均为1。

哈夫曼树

二叉树的应用非常广泛,哈夫曼是其中最典型的应用之一。通常,构建哈夫曼树的目的是为了设计哈夫曼编码。

哈夫曼树又称为最优二叉树,是在含有n个叶子结点,权值分别为n1 、n2...的所有二叉树中,带权路径长度WPL最小的二叉树。

  • 哈夫曼树树不唯一
  • 哈夫曼树中只包含度为0和度为2的结点
  • 树中权值越大的叶子离根结点越近。

哈夫曼树的构造过程

森林与二叉树的转换

森林的先根遍历对应于它转换成的二叉树的前序遍历;森林的后根遍历对应于它转换成的二叉树的中序遍历。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值