分類:1.平衡樹,全部葉子位於同一層或者至少彼此相差不超過一層。2.徹底樹,在平衡的基礎上,底層全部葉子位於樹的左邊。3.滿樹,對於一個n元樹,每層葉子都是滿的,且均在同一層。html
模擬連接法。建立一個node型數組,使得每一個元素存儲下一個children的地址。問題,當刪除一個結點時,若是不保留原結點位置,子結點移動時將會很是麻煩。若是隻將其內部元素刪除,保留內部結點的引用關係,又會佔用空間。java
層序遍歷。顧名思義,一層一層的遍歷。從根節點開始。直到最後一層。
node
2^h-1
個結點git
此時將一個順序列表存入其中,樹變爲了右單子樹或左單子樹。問題出現了,此時的樹直接變成了列表,查找效率也從O(logn)變爲O(n)。爲了解決這個問題,咱們引入了平衡樹的概念。如此,對於以不管何種順序存入樹的元素,不至於存的太深。在各個子樹最多隻能相差一的限制下,樹的優點得以保留。算法
if (next == null) return null; if (next.getElement().equals(targetElement)) return next; BinaryTreeNode<T> temp = findNode(targetElement, next.getLeft()); if (temp == null) temp = findNode(targetElement, next.getRight()); return temp;
BinaryTreeNode<T> current = findNode(targetElement, root); if (current == null) throw new ElementNotFoundException("LinkedBinaryTree"); return (current.getElement());
分別鎖定了對應的位置和結點。所以任意調用這兩個方法之一,便可找出相應的右子樹。從而將其刪除。刪除時,將對應結點視爲樹的根,直接將根所在的LinkedBinary樹等於null便可。數組
顯示了報錯,同時沒法執行代碼。反覆嘗試無果後,發現以前使用棧實現了一個Postfixtest,而本章也有一個使用數實現的計算後綴表達式的程序,在將其重名的更名後,重啓了幾回idea後,如願恢復了正常。個人理解是,首先idea必須保證全部程序不出錯,不然其餘程序編譯將沒法經過,同時,對於兩個同名程序,沒法判斷執行哪一個,所以選擇不執行,知道將其改變。數據結構
但是,拋出的是空指針異常,也就是並未找到所要刪除的結點。因此問題不在這裏。在於findnode方法,在方法體,我設置傳入了一個的LinkedBinary的參數,可是,該樹此時爲空,天然將致使其爲空指針。ide
解決了這個問題,再到contain方法,又出現了問題。依舊爲空,仔細比對,發現了問題。在方法頭,從新實例化了一個LinkedBinary對象,可是,其實樹已經在以前方法肯定,從新實例化反而至關於將其清空,形成空指針的狀況。學習
第一次學習非線性數據結構,對於某些知識還不是很瞭解,將繼續對這些展開學習
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 0/0 | 1/1 | 3/3 | |
第二週 | 409/409 | 1/2 | 5/8 | |
第三週 | 1174/1583 | 1/3 | 10/18 | |
第四周 | 1843/3426 | 2/5 | 10/28 | |
第五週 | 539/3965 | 2/7 | 20/48 | |
第六週 | 965/4936 | 1/8 | 20/68 |