2.最小堆将其最小元素存储在该二叉树的根处,且其根的两个孩子一样也是最小堆。html
①维持该堆的彻底性属性和有序属性,因此插入的元素位置只存在一个正确的位置,要否则在h层左边的下一个空位置,要否则在h+1层左边的第一个位置。
下图中,左图这种类型的为h层左边的下一个空位置,右图这种类型的为h+1层左边的第一个位置。java
④在堆实现中,通常会对树中的最末一个结点(最末一片叶子),进行跟踪记录。node
13.二叉树的数组实现中,树的根位于位置0处,对于每个结点n,n的左孩子将位于数组的2n+1位置处,n的右孩子将位于数组的2(n+1)位置处。git
HeapNode<T> result = lastNode; while ((result != root) && (result.getParent().getLeft() != result)) result = result.getParent(); if (result != root) if (result.getParent().getRight() == null) result = result.getParent(); else { result = (HeapNode<T>) result.getParent().getRight(); while (result.getLeft() != null) result = (HeapNode<T>) result.getLeft(); } else while (result.getLeft() != null) result = (HeapNode<T>) result.getLeft(); return result;
①下图中7的结点为lastNode,看while循环的判断条件,该结点不为根结点,可是该结点的双亲结点的左孩子是它本身,因此不进入循环。看if语句块的判断条件,首先不为根结点,该结点的双亲结点的右孩子也就是7结点的兄弟是空的,因此返回的值为7结点的双亲结点,从图中能够很明显的看出,插入元素位置的双亲结点的确是7结点的双亲结点。api
②下图中8的结点为lastNode,看while循环的判断条件,该结点不为根结点,该结点的双亲结点的左孩子不是它本身,因此进入循环。result等于8结点的双亲结点,也就是3结点,看while循环的判断条件,该结点不为根结点,该结点的双亲结点的左孩子是它本身,因此跳出循环。看if语句块的判断条件,首先不为根结点,该结点的双亲结点的右孩子不为空,因此result等于该结点的双亲结点的右孩子,也就是3结点的右兄弟4结点,它的左孩子为空因此,插入元素的位置的双亲结点为4结点,从图中也可看出。数组
③这种状况同①,能够算做一种状况数据结构
④下图中10的结点为lastNode,看while循环的判断条件,会发现要通过两次循环,最终result等于1的结点,而后进入if语句块,1结点的双亲结点的右孩子不为空,因此进入else,result等于1结点的双亲结点的右孩子,也就是它本身的右兄弟,也就是2结点。看while循环的判断条件,2的左孩子不为空,知足条件,因此进入循环,得出result为5结点,很显然与图中符合一致。学习
右子树的状况与上面几种同样,故再也不探究。.net
private void heapifyAdd() { T temp; int next = count - 1; temp = tree[next]; while ((next != 0) && (((Comparable)temp).compareTo(tree[(next-1)/2]) < 0)) { tree[next] = tree[(next-1)/2]; next = (next-1)/2; } tree[next] = temp; }
22440设计
分析:插入元素只有一个正确的位置的缘由是由于它是一棵二叉彻底树,而不是由于是一颗二叉搜索树。
分析:按索引值来走,先是比a[0]与a[1],须要把他俩交换,获得3 5 9 5,再比较a[1]和a[2],不动,再比较a[2]和a[3],须要交换,因此获得3 5 5 9
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 2/2 | |
第二周 | 1010/1010 | 1/2 | 10/12 | |
第三周 | 651/1661 | 1/3 | 13/25 | |
第四周 | 2205/3866 | 1/4 | 15/40 | |
第五周 | 967/4833 | 2/6 | 22/62 | |
第六周 | 1680/6513 | 1/7 | 34/96 | |
第七周 | 2196/8709 | 1/8 | 35/131 | |
第八周 | 1952/10661 | 2/9 | 49/180 |
计划学习时间:20小时
实际学习时间:49小时
改进状况:这周有实验因此花费的时间不少。