标签:center tps rem 包含 一起 move 原因 lin 学习
每个BinaryTreeNode对象要维护一个指向结点所存储元素的引用,另外还要维护指向结点的每个孩子的引用。
private BinaryTreeNode<T> replacement(BinaryTreeNode<T> node) {
BinaryTreeNode<T> result = null;
if ((node.left == null) && (node.right == null)) {
result = null;
} else if ((node.left != null) && (node.right == null)) {
result = node.left;
} else if ((node.left == null) && (node.right != null)) {
result = node.right;
} else {
BinaryTreeNode<T> current = node.right;// 初始化右侧第一个结点
BinaryTreeNode<T> parent = node;
// 获取右边子树的最左边的结点
while (current.left != null) {
parent = current;
current = current.left;
}
current.left = node.left;
// 如果当前待查询的结点
if (node.right != current) {
parent.left = current.right;// 整体的树结构移动就可以了
current.right = node.right;
}
result = current;
}
return result;
}
public void removeAllOccurrences(T targetElement) {
removeElement(targetElement);//在我看来就是利用了之前的删除元素的方法
try {
while (contains((T) targetElement))
removeElement(targetElement);
}
catch (Exception ElementNotFoundException) {
}
}
右旋:a.根的左孩子为新的根元素;b.原根成为新根的右孩子;c.原根的左孩子的右孩子为原根的新的左孩子。(如果是因为树根左孩子的左子树中较长的路径而导致的不平衡,右旋可以解决它)
左旋:a.根的右孩子为新的根元素;b.原根成为新根的左孩子;c.原根的右孩子的左孩子为原根的新的右孩子。 (对于由树根右孩子的右子树中较长路径而导致的不平衡,左旋可以解决它)
了解了左旋和右旋,其实右左旋和左右旋都是在这两个的基础上进行的。
对于AVL树和红黑树,都要从插入和删除结点的位置需要上溯树,所以通常最好实现为每个结点都包含一个指向其父结点的引用。
public class A{//定义类A
}
public class B extends A{//定义类B,继承类A
}
则,类A就是超类或父类,类B叫子类
问题2解决方案:这个位置我回到第十章那个中序遍历那看了一眼。用一个图来表示我的收获。
而且我还得到了,其实中序后继者,就是找这个要删除的结点的右子树中最小的那个值,这个值就是中序后继者。
问题3:书中的红黑树部分说,规则之一是从树根到树叶的每条路径都包含同样数目的黑色结点,但是书中有个图
问题3解决方案:这个是不对的,因为不符合规则中的每条路径的黑色结点相同;且这个可以看出,对于红黑树,它的平衡性不是特别的严格。
问题1:在对LinkedBinarySearchTree进行测试时,出现了这样的问题。,它出现了地址。
问题1解决方案:最开始我觉得肯定没问题啊,后来出现这样了。这个问题其实挺普遍的,是toString方法没写的缘故,我忘记写了!!!它这个也是树,所以我直接就将第十章的printTree的给拿过来了。
觉得吧,这一章的红黑树真的是迷的一批,我都看不懂,只能慢慢看,但是这一章的内容在第十章的基础上再看的话,我就觉得好像比刚接触树时更懂点了,而且我还在书中把一些转换的过程自己试了试,尽力的搞懂它,我觉得这也算是一种进步吧。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 6/6 | |
第二周 | 985/985 | 1/1 | 18/24 | |
第三周 | 663/1648 | 1/1 | 16/40 | |
第四周 | 1742 /3390 | 2/2 | 44/84 | |
第五周 | 933/4323 | 1/1 | 23/107 | |
第六周 | 1110/5433 | 2/2 | 44/151 | |
第七周 | / | 1/1 | 56/207 |
20172306 2018-2019-2 《Java程序设计与数据结构》第七周学习总结
标签:center tps rem 包含 一起 move 原因 lin 学习
原文地址:https://www.cnblogs.com/lc1021/p/9879607.html