20162317 2017-2018-1 《程序设计与数据结构》第七周学习总结

20162317 2017-2018-1 《程序设计与数据结构》第七周学习总结

教材学习内容总结

  • 1、树:非线性集合
  • 2、树中包含的结构以及这些结构的定义
  • 3、树分类的依据
  • 4、遍历树的方法以及分析
  • 5、用链表以及数组实现二叉树

教材学习中的问题和解决过程

问题1:先序、中序、后序遍历逻辑上的遍历仍然学不通透,因此下面找三个树图来练习三种遍历方法:

题目1:

先序:63-55-42-10-45-58-90-70-67-83-99

中序:10-42-45-55-58-63-67-70-83-90-99

后序:10-45-42-58-55-67-83-70-99-90-63

题目2:

先序:11-7-3-9-18-16-14-26

中序:3-7-9-11-14-16-18-26

后序:3-9-7-14-16-26-18-11

题目3:

先序:10-3-2-4-9-11-20-8-13-21

中序:2-3-4-11-9-20-10-13-8-21

后序:2-11-20-9-4-3-13-21-8-10

问题2:有100个结点的完全二叉树,其高度是多少?叶结点数是多少?

问题2解决方案:

  • 高度:由二叉树的性质可以指导,高度等于[log2n]+1,100个结点的话就可以得到[log2 100]+1,取整计算后得到答案是7。

  • 叶结点:设叶结点的个数为n0度为2的结点数有n2个,则有n0 = n2+1,设完全二叉树中度为1的结点数为n1个,n1为1或0,因此就有n0+n1+n2=100, 得到:n0+n1+n0-1=100, 2*n0 + n1 = 101,从此可看出,n1不能为0,必为1,从而得到2xn0=100,n0=50.所以叶结点有50个。

问题3:高度为h的完全二叉树至少有多少个结点?至多有多少个结点?

问题3的解决方案:

  • 至多的结点数:这个比较简单,根据公式:2^h-1即这种情况,即倒数第二层的最后一个结点连着一个叶结点的情况。

-至少的结点数:倒数第二行第一个结点并没有连着结点即可,即2^(h-1)个结点

问题4:已经知道一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,...,nm个度为m的结点,问该树中有多少个叶结点?

问题4的解决方案:根据和同学的讨论以及和网上资料的查阅:

设n为总结点个数,n0为叶子结点(即度为0的结点个数),则有:
n=n0+n1+n2+…+nm (1)
又有(分支总数):n-1=n11+n22+n33+…+nmm (2)
(因为一个结点对应一个分支)
式(2)-(1)得:
1=n0-n2-2n3-…-(m-1)nm
则有:n0=1+n2+2n3+…+(m-1)nm

问题5以及解决方案:对二叉树遍历操作的深入思考

代码托管

学习进度条

| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)
| -------- | :----------------😐:----------------😐:---------------: |:-----😐
| 目标 | 5000行 | 15篇 | 400小时 | |
| 第一周 | 200/200 | 2/2 | 20/20 | |
| 第二周 | 20/220 | 1/3 | 20/40
| 第三周 | 645/865 | 1/4 | 14/54 | |
| 第五周 | 654/1519 | 1/5 | 18/72
| 第六周 | 436/1955 | 1/6 | 16/88 | |
| 第七周 | 839/2794 | 2/8 | 20/108 | |

  • 计划学习时间:18小时

  • 实际学习时间:20小时

  • 改进情况:遇到不会的问题会做一定的深究,要求自身对基础更为扎实。

posted @ 2017-10-20 15:11  FunnyOne  阅读(408)  评论(0编辑  收藏  举报