计算机考研复试面试常问问题 数据结构篇(下)
使用前需知(拒绝白嫖,如果对你有帮助,你只需点个赞就行):
注意:有人在闲鱼上盗卖我的资料,而且还有很多同学买了,请各位擦亮双眼,我是整理出来免费分享给大家的!
大家请多点赞和评论,这样后面的同学更容易百度到,不至于被人盗卖,我就不加水印影响大家使用了!
第一次整理,度不好控制,有不好的地方希望大家理解,后面可能会改进,造福今年之后的同学们!
需要pdf直接打印版,可在公众号"程序员宝藏"回复复试上岸获取(会持续更新)
在复习过程中,我用心查阅并整理了在考研复试面试中可能问到的大部分问题,并分点整理了答案,可以直接理解背诵并加上自己的语言润色!极力推荐打印下来看,效率更高!
声明:一些边边角角的没有收集,毕竟是考研面试,不是笔试,这样也能减轻大家的负担!
此系列一共有8篇:编程语言篇**|数据结构篇|操作系统篇|组成原理篇|计算机网络篇|数据库篇|软件工程篇|计算机专业英语篇**(还未全部完成,敬请期待,你们的支持和关注是我最大的动力!)
个人整理,不可用于商业用途,转载请注明出处。
需要408电子书2021版,可在公众号"程序员宝藏"回复408电子书获取
需要408初试视频2021版,可在公众号"程序员宝藏"回复408视频获取
需要复试机试视频,可在公众号"程序员宝藏"回复机试必过获取
加油,大家都可以上岸!!!让我们一起努力!!!
第五章、树与二叉树
快速唤起记忆知识框架:

19.树与二叉树的相关概念?
树是非线性结构,其元素之间有明显的层次关系。在树的结构中,每个节点都只有一个前件称为父节点,没有前件的节点为树的根节点,简称为树的根;每个节点可以有多个后件成为节点的子节点,没有后件的节点称为叶子节点。
在树的结构中,一个节点所拥有的子节点个数称为该节点的度,树中最大的节点的度为树的度,树的最大的层次称为树的深度
二叉树:二叉树是另一种树形结构,其特点是每个结点至多只有两棵子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。与树相似,二叉树也以递归的形式定义。二叉树是n (n >=0) 个结点的有限集合:
1)或者为空二叉树,即n=0 。
2)或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。二叉树是有序树,若将其左、右子树颠倒,则成为另一棵不同的二叉树。即使树中结点只有
一棵子树,也要区分它是左子树还是右子树满二叉树:满二叉树是指除了最后一层外其他节点均有两颗子树。
完全二叉树:完全二叉树是指除了最后一层外,其他任何一层的节点数均达到最大值,且最后一层也只是在最右侧缺少节点
二叉树的存储:二叉树可以用链式存储结构来存储,满二叉树和完全二叉树可以用顺序存储结构来存储
二叉树的遍历:二叉树有先序遍历(根左右),中序遍历(左根右)和后续遍历(左右根);还有层次遍历,需要借助一个队列。
三种遍历算法中,递归遍历左、右子树的顺序都是固定的,只是访问根结点的顺序不同。不管采用哪种遍历算法,每个结点都访问一次且仅访问一次,故时间复杂度都是O(n) 。在递归遍历
中,递归工作栈的栈深恰好为树的深度,所以在最坏情况下,二叉树是有n 个结点且深度为n 的单支树,遍历算法的空间复杂度为O(n) 。
20.如何由遍历序列构造一棵二叉树?
1)由二叉树的先序序列和中序序列可以唯一地确定一棵二叉树。
在先序遍历序列中,第一个结点一定是二叉树的根结点;而在中序遍历中,根结点必然将中
序序列分割成两个子序列,前一个子序列是根结点的左子树的中序序列,后一个子序列是根结点的右子树的中序序列。根据这两个子序列,在先序序列中找到对应的左子序列和右子序列。在先序序列中,左子序列的第一个结点是左子树的根结点,右子序列的第一个结点是右子树的根结点。如此递归地进行下去,便能唯一地确定这棵二叉树。2)由二叉树的后序序列和中序序列也可以唯一地确定一棵二叉树。
因为后序序列的最后一个结点就如同先序序列的第一个结点,可以将中序序列分割成两个子
序列,然后采用类似的方法递归地进行划分,进而得到一棵二叉树。3)由二叉树的层序序列和中序序列也可以唯一地确定一棵二叉树。需要注意的是,若只知道二叉树的先序序列和后序序列,则无法唯一确定一棵二叉树。
21.线索二叉树的概念?
对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。
这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
**注意:**线索链表解决了无法直接找到该结点在某种遍历序列中的前驱和后继结点的问题,解决了二叉链表找左、右孩子困难的问题。
二叉树的遍历本质上是将一个复杂的非线性结构转换为线性结构,使每个结点都有了唯一前驱和后继(第一个结点无前驱,最后一个结点无后继)。对于二叉树的一个结点,查找其左右子女是方便的,其前驱后继只有在遍历中得到。为了容易找到前驱和后继,有两种方法。一是在结点结构中增加向前和向后的指针,这种方法增加了存储开销,不可取;二是利用二叉树的空链指针。
22.树的存储结构?
1.双亲表示法:
这种存储方式采用一组连续空间来存储每个结点,同时在每个结点中增设一个伪指针,指示
其双亲结点在数组中的位置。
该存储结构利用了每个结点(根结点除外)只有唯一双亲的性质,可以很快得到每个结点的
双亲结点,但求结点的孩子时需要遍历整个结构。
2.孩子表示法:
孩子表示法是将每个结点的孩子结点都用单链表链接起来形成一个线性结构,此时n 个结点
就有n 个孩子链表(叶子结点的孩子链表为空表),这种存储方式寻找子女的操作非常直接,而寻找双亲的操作需要遍历n个结点中孩子链表指针域所指向的n个孩子链表。
3.孩子兄弟表示法:
孩子兄弟表示法又称二叉树表示法,即以二叉链表作为树的存储结构。孩子兄弟表示法使每
个结点包括三部分内容:结点值、指向结点第一个孩子结点的指针,及指向结点下一个兄弟结点的指针(沿此域可以找到结点的所有兄弟结点)
这种存储表示法比较灵活,其最大的优点是可以方便地实现树转换为二叉树的操作,易于查
找结点的孩子等,但缺点是从当前结点查找其双亲结点比较麻烦。若为每个结点增设一个parent域指向其父结点,则查找结点的父结点也很方便





最低0.47元/天 解锁文章
781

被折叠的 条评论
为什么被折叠?



