這是一個Binary Tree圖。我無法理解該圖是如何創建的。您的頂部有5個,但您如何確定接下來的數字和順序是什麼?有人能一步步地走過我嗎?構建二叉樹圖
構建二叉樹圖
回答
Ofcourse,
嗯,你說這是二叉樹。因此,這是算法: 當插入新號碼時,如果號碼較小,如果它更大,則它會左移 ,它會向右移動。您應該檢查這個小程序 產生二叉樹的理解它是如何工作的
這只是一個鏈接到youtube –
對不起,是一個錯誤。我編輯了鏈接。 – Marko
數字的具體排列不是規範的(即存在其他有效的排列方式)。唯一的要求是每個節點的左側子樹只包含較小的節點,而右側的子樹只包含較大的節點。
您對特定安排的方式取決於用於填充它的算法以及插入值的順序。這在「平衡樹」部分的文章中有部分解釋。插入時,您需要保持樹木平衡。多久重新平衡一下,以及如何重新平衡是數百萬頁教科書,研究論文和代碼行的主題。
總之,你的問題的答案是「這取決於」。
對於幼稚的實現,它不一定會產生平衡的樹,每個插入操作只是簡單地走樹,如果數目小於當前訪問的節點,則向左移動;如果變大則忽略相等的值需要確保不發生或決定處理它們的政策。當你到達一個死衚衕時(即一個空的左指針或右指針),在那裏插入一個插入值的新節點。
側欄:值得注意的是,由於其簡單性,在很少的情況下,naïve算法可以滿足您的需求。您可以簡單地通過在插入之前隨機移動輸入數據來避免不平衡樹。然而,在大多數情況下,你最好甚至不使用二叉樹。散列表幾乎總是可取的。
感謝您的解釋。 –
這聽起來像你是專門搞不清楚該鏈接的圖。該圖似乎有錯誤。
正如其他人所說,有多種有效的安排,但對排序二叉樹的要求是每個節點的左子樹只包含較小的元素,而右子樹只包含較大的元素。
在你的問題中提供的鏈接圖中,自6> 5以來違反了。元素6屬於5的右側子樹,它似乎是作者的一個簡單錯誤。
謝謝,您的答案是正確的,謝天謝地,我們發現了錯誤。 :D –
順便說一句,如果你在樹的左列和內部交換5和6,樣本將是正確的) – aiodintsov
- 1. 二叉樹,基於前序構建樹
- 2. 創建二叉樹
- 3. 從預置位bitstring構建二叉樹
- 4. 遞歸構建二叉搜索樹
- 5. 如何構建大型二叉樹?
- 6. 構建方法來搜索二叉樹
- 7. 使用foldr構建平衡二叉樹
- 8. 如何構建二叉搜索樹
- 9. 需要創建二叉樹結構
- 10. EXC_BAD_ACCESS二叉樹構造
- 11. 二叉樹數據結構
- 12. 二叉樹和結構
- 13. 二叉樹,構造函數
- 14. 構建四叉樹
- 15. 二叉樹 - 哪一種二叉樹
- 16. 二叉樹到二叉搜索樹(BST)
- 17. 如何創建二叉樹(非二叉搜索樹)
- 18. fork()和二叉樹創建
- 19. 如何建立二叉樹
- 20. 創建二叉搜索樹
- 21. ocaml的 - 建立二叉樹
- 22. 如何創建二叉樹
- 23. 從Stack創建二叉樹?
- 24. 二叉樹結構(自引用結構)
- 25. 構建樹時二叉樹正在丟失節點
- 26. 從樹(n-ary)創建二叉樹
- 27. 二叉樹findHeight
- 28. balanced()二叉樹
- 29. 二叉樹
- 30. 二叉樹
您是否想知道節點是如何添加到二叉樹中的?或者C#如何專門實現二叉樹? – GrantVS
輸入是{5,2,1,3,4 ...}。 5是第一位。 2是下一個:因爲它小於5,所以它往左。 1是下一個:因爲它小於5,小於2,它也向左。然後3:它小於5(左),但大於2.所以它進入2的*右*。等等。問:有意義嗎? – paulsm4
@ paulsm4- OMG THANK YOU !!!!!!這現在非常有意義。但是,我不明白6怎麼到4的右邊? –