《数据结构与面向对象程序设计》第九周学习总结
2.堆排序
4.删除元素(removeElement):
在二叉查找树中删除一个给定的结点p有三种情况:
(1)结点p无左右子树,则直接删除该结点
(2)结点p有左子树(右子树),则把p的左子树(右子树)接到p的父节点上
(3)左右子树同时存在,找到结点p的中序直接后继结点s,把结点s的数据转移到结点p,然后删除结点s,由于结点s为p的右子树总最左的结点,因而s无左子树,删除结点s.
问题1解决方案:高度和深度一组相反的概念
高度是指当前结点到叶子结点的最长路径,如所有叶子结点的高度都为0。
深度则是指从根结点到当前结点的最大路径长度,如根结点的深度为0。
高度就是从要计算的结点开始寻找最远路径长度,深度就是从根结点到该结点的最大路径长度;在一棵树中,高度+深度 = 树中最远的路径长度。
问题2解决方案:因为要求插入元素以后能够向上遍历,所以堆中的结点必须存储指向双亲的指针。继承BinaryTreeNode类,并且添加双亲指针和对应的set方法。
关于add element操作
addElement操作:
在适当位置添加一个元素。
对堆进行重排序,以保持其有序属性。
问题1:代码中未能实现树形输出,在本应该出现树形图案的地方出现如下情况:
问题1解决方案:在上网查阅资料,查询博客之后发现问题,修改toString方法,输出树状图案。
上周没有进行考试,所以没有错题。
教材学习中的问题和解决过程, 一个问题加1分()
最近学习的都是数据结构的知识,相对应的代码量也变得多了起来,作业和课堂实践也变多了。但是博客还是应该要认真完成,不忘初心,继续努力!
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 155/200 | 2/2 | 20/20 | 初步掌握linux命令、java小程序和jdb调试 |
第二 三周 | 470/625 | 2/4 | 20/40 | 学会scanner定义的使用,类的定义 |
第四周 | 1444/2069 | 2/4 | 20/60 | 下载安装IDEA及其插件,学会TDD调试,编写测试代码 |
第五周 | 1917/3986 | 2/8 | 20/80 | 简单的学会客户端和服务器的编写 |
第六周 | 1324/5310 | 1/9 | 20/100 | Java封装,继承,多态 |
第七周 | 2795/8105 | 3/12 | 40/140 | 栈,链表 |
第八周 | 1135/9240 | 1/13 | 40/180 | 选择,排序 |
第九周 | 3/16 | 40/220 | 二叉树,堆排序 |
原文:https://www.cnblogs.com/tursws/p/11854934.html