10.6之补10.5
反思与总结乃是学习的一部分!
昨天学了啥。。
一,P1200
1,不同类型的不能乱乘吧。char类型虽然是数字你也得把它转换成int类型的。
2,关于string中length()的用法。length测出的应该是字符串的长度再加上最后一个换行符好像是。但事实上并不是,仍然是字符串本来的长度。那我来看看最末位是什么,最末位什么也没有 。空格?输出不加换行符试一下
。是个空格。
同时跟这个对应的问题是,你string是从0开始计数的,如果你不注意的话可能在这块翻跟头。
举个例子吧,假如你要遍历这个字符串,那么你必须i从0开始,到length-1结束。
3,每做一个题,用自己的方法做完,也要看看别人的代码好在哪里,同时想想有什么其他的方法没有。在这方面之前的堆和快排我做的不是很好!应该是要回顾的。
4,比如我这个跟别人高赞的题解比较来看,起码的变量定义的位置,但是你要知道为什么。我百度了下这就涉及到了全局变量和局部变量这个东西了。这个就又涉及到静态内存和动态分布了。。这个再深入吧。
二,树。
1,什么是树?
一种递归定义的数据结构。
2,什么是二叉树?
从名字上来看,每个节点有两个儿子。同时最重要的特点是有序。
3,如何存储一棵树?
(1)采用最暴力直接的方法也就是邻接矩阵的方法。若一个树有n个节点,那么开一个n^2大的空间用来存储哪些点相连。
算了这个图片是真丑。根据我的简单定义,很明显浪费空间太大了。但是思路是顺承的。
(2)我们的思路一直就是记录下一个点与哪些点相连,这也就是记录下了所有的边。
那么我们对每个点开一个数组,记录下那些点跟它有边相连即可。
所以问题就是每个点要开多大呢?我们用什么来开呢?
从这里就可以分开了,我们可以选择用vector,众所周知,vector是动态规划空间的。
另外我们还可以用数组模拟链表即所谓的前向星。
代码实现?
4,关于二叉树的存储和遍历。
(1),二叉树有三种遍历方法,主要的区分方法在于你把根的位置放哪。
先序:根->左->右
中序:左->中->右
后序:左->右->中
根据我的测试,除了先序你做的都不好。
(2)二叉排序树的遍历
对了你得明白二叉排序树的定义,二叉树的前提下加上中序遍历有序。也就是上面节点的值满足左<中<右。
虽然你是写过一遍的人但我打赌你啥都不会。
这块得好好学习一下。
确实原理不懂。