标签:linked mic ase arch 性能 栈溢出 master inf 等于
二叉查找树:二叉查找树是一个二叉树,对于每个结点n,n的左子树包含的元素都小于n中的元素,n的右子树中包含的元素都大于等于n中的元素。
在二叉树中,新元素添加为树的叶节点。从根开始,沿着每个结点中的元素所确定的路径,直到相应的方向上没有子节点为止。
删除元素:
1、如果被删除结点是叶结点(无子结点),可以简单地删除。
2、如果被删结点有一个子结点,则用它的子结点替代它。
3、如果被删除结点有两个子结点,在树的更低层找到一个合适的结点替代它。被删除结点的子结点成为替代结点的子结点。
树的遍历:
(1)先序遍历:先访问根,再访问左右子树。
(2)中序便利:先遍历左子树,再访问根节点,再访问右子树。
(3)后序遍历:先便利左子树,再遍历右子树,最后遍历根节点。
树的实现
1.使用数组表示树:存储在数组中位置为 n 的元素,元素的左子结点存储在(2n + 1)的位置,右子结点存储在(2 x(n+1))的位置。
2.链式结点:使用一个单独的类来定义树结点。
问题1:递归和迭代的区别在哪里?
问题1解决方案:
程序调用自身的编程技巧称为递归,其实就是函数自己调用自己。迭代是指利用变量的原值推算出变量的一个新值,如果递归是自己调用自己的话,迭代就是A不停的调用B。
迭代使用的是循环(for,while,do-while)或者迭代器,当循环条件不满足时退出。而递归一般是函数递归,可以是自身调用自身,也可以是非直接调用,即方法A调用方法B,而方法B反过来调用方法A,递归退出的条件为if-else语句,当条件符合基的时候退出。
递归的代码比较简单易懂,实现一个计算逻辑往往只需要很短的代码就能解决。但是由于它要不停地调用函数,就可能浪费大量的空间。递归中函数调用的局部状态是用栈来记录的,所以如果递归太深的话还有可能导致堆栈溢出。而对于迭代而言,能使用递归实现的都可以使用迭代来实现,并且效率会很高,在空间消耗上也很小,唯一的缺点就是代码比较难懂。
问题2:对于红黑树存在的意义问题,为什么要单独设置一个红黑树呢?红黑树可以解决的问题AVL树也同样可以解决?
问题2解决方案:
最主要就是效率问题,红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
当然这也不是没有代价的,红黑树是牺牲了严格的高度平衡的优越条件为代价让红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。
问题1:教材中的代码在调试的过程中遇到了问题,其中的addElement和removeMin方法有问题。而且继承的LinkedMaxHeap中也有问题。
问题1解决方案:
addElement继承的是父类中的方法,在LinkedMaxHeap中,存在有add方法而没有addElement方法,将其改为add方法即可。
而removeMin方法,根据removeNext方法的注释
Removes the next highest priority element from this queue and returns a reference to it.
我们可知它应该是需要得到一个最大的元素,所以这里应该使用removeMax方法,而这个方法也存在于父类中,这个问题得到解决.
PriorityQueueNode类实现了Comparable接口,用到了泛型,把比较的类型设为PriorityQueueNode类型时,漏了一个,加上后问题就得到了解决。
修改后:
1.In a circular array-based implementation of a queue, the elements must all be shifted when the dequeue operation is called.
A .true B .false
正确答案: B
你的答案: A
解析:基于循环数组的队列实现无需移动元素。
2.In removing an element from a binary search tree, another node must be ___________ to replace the node being removed.
A .duplicated
B .demoted
C .promoted
D .None of the above
正确答案: C
我的答案: B
解析:当在二叉查找树上删除一个结点时,后面的结点需要向上移动来补全。当时,以为越靠近根结点说明深度越低,所以是降级了;
本周结对学习情况
20182311
本周事情比较多,学习时间不足,需要及时调整,花更多时间和精力去调整。下周开始要刻意训练自己的动手能力,多敲代码多看书。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 325/500 | 2/4 | 18/38 | |
第五周 | 600/1000 | 3/7 | 22/60 | |
第六周 | 300/500 | 2/4 | 28/40 | |
第七周 | 300/500 | 2/4 | 18/40 | |
第八周 | 300/500 | 2/4 | 18/36 | |
第9周 | 330/500 | 2/4 | 30/60 |
《Java程序设计与数据结构教程(第二版)》
《Java程序设计与数据结构教程(第二版)》学习指导
20182335 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结
标签:linked mic ase arch 性能 栈溢出 master inf 等于
原文地址:https://www.cnblogs.com/lijinquan/p/11891369.html