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小時
改進狀況:這周有實驗因此花費的時間不少。