整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          二叉樹模型怎么畫?詳細圖文解析繪制專業模型圖

          叉樹是一種數據結構,是由結點個數大于或等于0的結點所構成的結點有限集,或為空樹(即結點個數等于0),或有一個根結點和兩顆分別稱為左子樹和右子樹的互不相交的二叉樹構成。二叉樹每個結點的度不大于2(即每個結點最多只有兩個子結點),且子樹有左右之分,不可隨意顛倒順序。

          二叉樹模型常見用途

          二叉樹的應用很廣泛,可基于二叉樹前中后遍歷的遍歷法則用于文件夾管理上,可用于輸出某個文件夾下的所有文件名稱、統計某個文件夾的大小等。二叉樹作為一種數據結構,也可用于數據庫系統的排序和檢索等。二叉樹中的哈夫曼樹還可用于文本壓縮編碼,哈夫曼編碼是一種最基本的壓縮編碼方法。

          二叉樹模型繪制方法

          使用億圖圖示軟件來繪制二叉樹的操作十分簡便快捷,通過以下幾個步驟的進行就可輕松繪制出一幅專業美觀的二叉樹模型圖啦。

          第一步,下載并安裝“億圖圖示”軟件桌面端,安裝完成后雙擊啟動軟件,開始作圖。也可瀏覽器輸入網址直接訪問億圖圖示在線版。

          第二步,新建二叉樹模型圖。依次點擊“文件”-“新建”,在出現頁面上方的搜索欄中輸入“二叉樹”,點擊“搜索”按鈕,下方就會展開相應的模板庫。

          第三步,從下方出現的模板庫中選取一個自己喜歡的模板,點擊使用,打開模板。

          第四步,雙擊文本框,替換二叉樹模板內的文字。可根據自身需求增刪或移動模板內的節點個數及位置,也可根據自己的喜好個性化二叉樹模型圖。

          第五步,繪制完成后,可點擊左上角的文件按鈕,對繪制好的二叉樹模型圖進行保存、另存為、導出等操作。

          二叉樹模型繪制軟件——億圖圖示

          億圖圖示是一款跨平臺綜合辦公繪圖類的國產軟件,適用于Windows、Mac以及Linux多個系統平臺。支持繪制的繪圖類型多達260多種,且對各個繪圖類型,軟件內置了豐富的模板可供用戶挑選使用,具有豐富的繪圖素材可幫助使用者快速繪制,二叉樹模型圖、項目流程圖、思維導圖、商務圖表、組織結構圖、甘特圖、UML以及網絡拓撲圖等多種圖表類型,提高工作學習效率。
          使用億圖圖示繪制二叉樹模型圖,直接搜索套用模板,可快速繪制出專業美觀的二叉樹模型圖,有效節約時間成本!

          為什么選擇億圖圖示繪制二叉樹模型

          支持跨平臺使用:軟件支持Windows、Mac和Linux多個系統平臺使用,同時具有億圖在線版可支持在各個主流瀏覽器下直接輸入相應網址進行使用。
          導入格式豐富:支持導入Visio,SVG文件,也可批量轉化一整個目錄的Visio文件到Edraw文件,輕松實現文件格式轉變。
          導出格式豐富:可將圖表導出為JPG、PNG、GIF、HTML、PDF等多種格式,滿足不同的分享使用需求。
          海量的符號資源庫:億圖軟件內置超26000種圖形模板和矢量符號,可供用戶隨心挑選使用,快速繪制出漂亮美觀的圖表。
          操作簡單:軟件采用拖曳式操作,自帶模板,無需繪圖基礎,操作門檻低。

          自hackernoon,作者:javinpaul,機器之心編譯,機器之心編輯部。

          同學,你會手寫二叉樹嗎?近來正值秋招季節,很多編程面試都要求手寫數據結構手推機器學習算法。各位同學為了面試也會刷各種編程題,其中數據結構與排序搜索算法又是最為基礎的內容。在本文中,我們為各位讀者準備了 48 道基礎面試題,它可以幫助我們更深地理解數據結構。本文所有面試題都提供了 Java 解決方案,并介紹了比較流行的 GitHub 面試題項目。

          很多計算機科學專業畢業生和程序員都會去滴滴出行、這樣的獨角獸公司,或者亞馬遜、微軟和谷歌這樣的科技巨頭申請編程和軟件開發職位。你在申請這些工作時,肯定很想知道面試官會問到哪些問題。




          在本文中,作者會分享一些常見的編程面試問題,這些問題來自于針對不同經驗層次的程序員的面試——從應屆畢業生到具有一兩年經驗的程序員。

          編程面試題通常包含數據結構和基于算法的問題,以及一些邏輯問題,例如:如何在不使用臨時變量的情況下交換兩個整數?

          為了清晰,編程面試題需要劃分為不同主題。我們在面試中經常看到的領域是數組、鏈表、字符串、二叉樹以及有關算法的問題(例如字符串算法、快速排序或基數排序等排序算法),本文將介紹這些內容。

          雖然本文無法覆蓋你在面試中將要面臨的所有問題,但是它可以給你提供足夠的思路,讓你在面試時對于各種挑戰有所準備。

          一旦解決了這些問題,你就可以有信心面對任何電話面試或現場面試了。

          當然,如果你對于基本數據結構和算法沒有足夠的知識儲備,那么直接接觸以下問題將對你沒有幫助。

          算法和編程面試題 TOP 48


          廢話少說,這里有一份「編程面試最常見的問題列表」:

          1. 數組編程面試問題

          數組是最基本的數據結構,它將元素儲存在連續的內存空間中。數組也是面試官最喜歡問的主題之一,在任何編程面試中都能聽到非常多關于數組的問題,例如反轉數組、排序數組或搜索數組元素等。

          數組這種數據結構的主要優點在于如果給定索引,那么它會提供 O(1) 復雜度的搜索,這種搜索速度非常迅速。但是從數組中添加或移除元素會比較慢,因為一旦創建了數組,我們就很難再更改它的大小。如果需要更長或更短的數組,我們就需要重新創建新數組,并將老數組的所有元素復制到新數組中。

          解決數組問題的關鍵是對數組數據結構有比較深的理解,同時還需要了解循環、遞歸和基本運算子等常見的編程結構。以下是一些常見的數組編程面試問題:

          1. 在一個元素為 1 到 100 的整數數組中,如何搜索缺失元素?

          • 解決方案:http://javarevisited.blogspot.com/2014/11/how-to-find-missing-number-on-integer-array-java.html

          2. 給定一個數組,如何搜索重復元素?

          • 解決方案:http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

          3. 給定一個亂序數組,如何搜索最大和最小元素?

          • 解決方案:http://java67.blogspot.com/2014/02/how-to-find-largest-and-smallest-number-array-in-java.html

          4. 給定一個數值,如何搜索整數數組中加和為該數值的成對元素?

          • 解決方案:http://javarevisited.blogspot.com/2014/08/how-to-find-all-pairs-in-array-of-integers-whose-sum-equal-given-number-java.html

          5. 如果數組包含多個重復值,如何搜索所有重復值?

          • 解決方案:http://javarevisited.blogspot.com/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html

          6. 給定一個數組,如何用 Java 刪除重復元素?如何在不使用庫的情況下移除數組中的重復元素?

          • 解決方案:http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

          7. 如何使用快速排序算法對整數數組進行排序?

          • 解決方案:http://javarevisited.blogspot.com/2014/08/quicksort-sorting-algorithm-in-java-in-place-example.html

          8. 如何使用 Java 反轉一個數組?

          • 解決方案:http://javarevisited.blogspot.com/2013/03/how-to-reverse-array-in-java-int-String-array-example.html


          這些問題不僅能幫助我們提高解決問題的能力,同時也能提升我們關于數組數據結構的理解。

          如果你需要了解更多基于數組的深度問題,你可以在 GitHub 或 Coursera 上多找找關于數據結構的課程與資料,例如在 GitHub 中,就有非常多關于數組的學習資料,下面我們介紹了一份中文版的谷歌的面試資料,它在 GitHub 上有 6 萬多的收藏量。

          項目地址:https://github.com/jwasham/coding-interview-university/blob/master/translations/README-cn.md


          2. 鏈表編程面試問題

          鏈表是補充數組數據結構的另一種常見數據結構。與數組類似,它也是線性數據結構,以線性方式存儲元素。

          然而,與數組不同的是,它不會將元素存儲在連續的位置;相反,它會將其分散存儲在內存中,彼此通過節點相互連接。鏈表是節點列表,其中每個節點包含存儲的值和下一個節點的地址。

          由于這種結構,在鏈表中添加或刪除元素變得很簡單,因為你只需要改變鏈接而不是創建數組,但是這樣會使搜索變得困難,并且經常需要 O(n) 的時間復雜度才能在單個鏈表中找到某個元素。

          這篇文章(https://javarevisited.blogspot.com/2013/07/difference-between-array-and-linked-list-java.html)提供了更多關于數組和鏈表數據結構之間差異的信息。


          鏈表還有多種變體,如單鏈表,即允許在一個方向(正向或反向)上遍歷;雙鏈表則允許你在兩個方向(向前或向后)遍歷;最后是循環鏈表,它形成一個循環。

          要解決關于鏈表的問題,掌握遞歸知識很重要,因為鏈表是遞歸數據結構。

          如果你從鏈表中取出一個節點,剩下的數據結構仍然是鏈表,因此,許多鏈表問題的遞歸解比迭代解更簡單。

          以下是關于鏈表的一些常見問題和解決方案:

          9. 如何在一次傳遞中找到單鏈表的中間元素?

          • 解決方案:http://javarevisited.blogspot.sg/2012/12/how-to-find-middle-element-of-linked-list-one-pass.html

          10. 如何檢查給定的鏈表是否包含循環?如何找到循環的起始節點?

          • 解決方案:http://javarevisited.blogspot.sg/2013/05/find-if-linked-list-contains-loops-cycle-cyclic-circular-check.html

          11. 如何反轉鏈表?

          • 解決方案:http://www.java67.com/2016/07/how-to-reverse-singly-linked-list-in-java-example.html

          12. 在沒有遞歸的情況下如何反轉單鏈表?

          • 解決方案:http://javarevisited.blogspot.sg/2017/03/how-to-reverse-linked-list-in-java-using-iteration-and-recursion.html

          13. 如何刪除亂序鏈表中的重復節點?

          • 解決方案:https://www.geeksforgeeks.org/remove-duplicates-from-an-unsorted-linked-list/

          14. 如何測量單鏈表的長度?

          • 解決方案:http://javarevisited.blogspot.sg/2016/05/how-do-you-find-length-of-singly-linked.html

          15. 如何從單鏈表的末端找出第三個節點?

          • 解決方案:http://javarevisited.blogspot.sg/2016/07/how-to-find-3rd-element-from-end-in-linked-list-java.html

          16. 如何使用堆棧算出兩個鏈表的總和?

          • 解決方案:https://www.geeksforgeeks.org/sum-of-two-linked-lists/


          這些問題有助于你發展解決問題的技能,并提升你對鏈表數據結構的了解。目前有非常多的資源可以幫助我們理解鏈表,例如在 GitHub 上一個交互式的編碼實踐中,它使用 Jupyter Notebook 提供了數據結構與算法的各種練習,其中就包括了很多鏈表問題及實踐。

          項目地址:https://github.com/donnemartin/interactive-coding-challenges




          3. 字符串編碼面試問題

          除了數組和鏈表數據結構,字符串也是編程工作面試中的另一熱點話題。我參加過的編碼面試基本都問過關于字符串的問題。

          如果你了解數組,那么你就能輕易地解決基于字符串的問題,因為字符串就是字符數組。因此,你通過解決數組編程問題學到的所有技巧,也能用來解決字符串編程問題。

          以下是編程工作面試中常問的字符串編程問題列表:

          17. 如何打印字符串中重復的字符?

          • 解決方案:http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html

          18. 如何檢查兩個字符串是否互為逆序?

          • 解決方案:http://javarevisited.blogspot.sg/2013/03/Anagram-how-to-check-if-two-string-are-anagrams-example-tutorial.html

          19. 如何打印字符串中首個非重復字符?

          • 解決方案:http://javarevisited.blogspot.sg/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html

          20. 如何使用遞歸反轉給定字符串?

          • 解決方案:http://javarevisited.blogspot.sg/2012/01/how-to-reverse-string-in-java-using.html

          21. 如何檢查一個字符串是否僅包含數字?

          • 解決方案:http://javarevisited.blogspot.sg/2012/10/regular-expression-example-in-java-to-check-String-number.html

          22. 如何搜索字符串中的重復字符?

          • 解決方案:http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html

          23. 給定一個字符串,如何統計元音數和輔音數?

          • 解決方案:http://java67.blogspot.sg/2013/11/how-to-count-vowels-and-consonants-in-Java-String-word.html

          24. 給定一個字符,如同計算它在字符串中出現的次數?

          • 解決方案:http://javarevisited.blogspot.sg/2012/12/how-to-count-occurrence-of-character-in-String.html

          25. 如何搜索一個字符串的所有排列情況?

          • 解決方案:http://javarevisited.blogspot.com/2015/08/how-to-find-all-permutations-of-string-java-example.html

          26. 在不使用任何庫的情況下,如何反轉給定句子中的單詞?

          • 解決方案:http://java67.blogspot.com/2015/06/how-to-reverse-words-in-string-java.html

          27. 如何檢查兩個字符串是不是互為旋轉(rotation)?

          • 解決方案:http://www.java67.com/2017/07/string-rotation-in-java-write-program.html

          28. 給定一個字符串,如何檢查它是不是回文結構?

          • 解決方案:http://java67.blogspot.com/2015/06/how-to-check-is-string-is-palindrome-in.html


          這些問題可以提升你對字符串數據結構的了解。如果你能獨立解決所有這些字符串問題,說明你的狀態很好。

          如果想深入了解一些更復雜的問題,我推薦你去看 Steven Skiena 的《The Algorithm Design Manual》,這本書里有最難的算法問題。

          網上也有該書的 PDF 版,下載地址:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.471.4772&rep=rep1&type=pdf





          如果你需要更多的練習,這里還有另外 20 個關于字符串編程的問題:

          http://javarevisited.blogspot.sg/2015/01/top-20-string-coding-interview-question-programming-interview.html

          4. 二叉樹編程面試問題

          現在我們只了解了線性數據結構方面的問題,但是真實世界中的所有信息不可能全是線性的,這就需要樹數據結構了。

          樹數據結構允許以層級形式存儲數據。根據存儲數據的方式,有多種樹類型,如二叉樹。

          和它的近親二叉查找樹一樣,它也是最流行的樹數據結構之一。因此,你會看到很多相關的有趣問題。例如,如何遍歷樹、計算節點數量、找出深度,以及檢查是否平衡。

          解決二叉樹問題的關鍵在于深厚的理論知識,如二叉樹的大小或深度、什么是葉節點、什么是節點,以及了解流行的遍歷算法。

          以下是軟件工程師或開發工作面試中常見的二叉樹相關編程問題:

          29. 如何實現二叉查找樹?

          • 解決方案:http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3

          30. 如何對給定二叉樹執行前序遍歷?

          • 解決方案:http://javarevisited.blogspot.sg/2016/07/binary-tree-preorder-traversal-in-java-using-recursion-iteration-example.html#axzz5ArdIFI7y

          31. 如何在沒有遞歸的情況下對給定二叉樹執行前序遍歷?

          • 解決方案:http://www.java67.com/2016/07/binary-tree-preorder-traversal-in-java-without-recursion.html

          32. 如何對給定二叉樹執行中序遍歷?

          • 解決方案:http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

          33. 如何在沒有遞歸的情況下通過對給定二叉樹執行中序遍歷來打印所有節點?

          • 解決方案:http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

          34. 如何實現后序遍歷算法?

          • 解決方案:http://www.java67.com/2016/10/binary-tree-post-order-traversal-in.html

          35. 如何在沒有遞歸的情況下對給定二叉樹執行后序遍歷?

          • 解決方案:http://www.java67.com/2017/05/binary-tree-post-order-traversal-in-java-without-recursion.html

          36. 如何打印二叉查找樹的所有葉節點?

          • 解決方案:http://www.java67.com/2016/09/how-to-print-all-leaf-nodes-of-binary-tree-in-java.html

          37. 如何計算給定二叉樹中葉節點的數量?

          • 解決方案:http://javarevisited.blogspot.sg/2016/12/how-to-count-number-of-leaf-nodes-in-java-recursive-iterative-algorithm.html

          38. 如何在給定數組中執行二元搜索?

          • 解決方案:http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3


          如果你認為自己對二叉樹編程的了解不足,無法解決這些問題,我建議你先熟練掌握數據結構和算法知識,比如你可以上這門課《From 0 to 1: Data Structures & Algorithms in Java》。同樣,你也可以查閱準備 Google 面試的一套完整手冊,這套 GitHub 手冊前面已經介紹了,但它在二叉樹等數據結構上真的有非常多的案例與教程。

          項目地址:https://github.com/jwasham/coding-interview-university





          如果你需要更多推薦,可以參考:

          • http://javarevisited.blogspot.sg/2015/07/5-data-structure-and-algorithm-books-best-must-read.html
          • http://javarevisited.blogspot.sg/2018/01/top-5-free-data-structure-and-algorithm-courses-java—c-programmers.html


          5. 其它編程面試問題

          除了數據結構方面的問題,大部分編程工作面試也會問關于算法、設計、位運算和通用的邏輯問題。

          針對性練習很重要,因為有時在實際面試中它們會有點難解。事先練習不僅能夠讓你熟悉這些問題,還能讓你在向面試官解釋答案時更加自信。

          39. 如何實現冒泡排序算法(bubble sort algorithm)?

          • 解決方案:http://javarevisited.blogspot.sg/2014/08/bubble-sort-algorithm-in-java-with.html#axzz5ArdIFI7y

          40. 如何實現迭代快速排序算法(iterative quicksort algorithm)?

          • 解決方案:http://javarevisited.blogspot.sg/2016/09/iterative-quicksort-example-in-java-without-recursion.html#axzz5ArdIFI7y

          41. 如何實現插入排序算法(insertion sort algorithm)?

          • 解決方案:http://www.java67.com/2014/09/insertion-sort-in-java-with-example.html

          42. 如何實現歸并排序算法(merge sort algorithm)?

          • 解決方案:http://www.java67.com/2018/03/mergesort-in-java-algorithm-example-and.html

          43. 如何實現桶排序算法(bucket sort algorithm)?

          • 解決方案:http://javarevisited.blogspot.sg/2017/01/bucket-sort-in-java-with-example.html

          44. 如何實現計數排序算法(counting sort algorithm)?

          • 解決方案:http://www.java67.com/2017/06/counting-sort-in-java-example.html

          45. 如何實現基數排序算法(radix sort algorithm)?

          • 解決方案:http://www.java67.com/2018/03/how-to-implement-radix-sort-in-java.html

          46. 如何在不使用第三個變量的前提下交換兩個數字?

          • 解決方案:http://www.java67.com/2015/08/how-to-swap-two-integers-without-using.html

          47. 如何確認兩個矩形是否重疊?

          • 解決方案:http://javarevisited.blogspot.sg/2016/10/how-to-check-if-two-rectangle-overlap-in-java-algorithm.html

          48. 如何設計自動販賣機?

          • 解決方案:http://javarevisited.blogspot.sg/2016/06/design-vending-machine-in-java.html


          如果你想查看更多此類編程問題,可以閱讀這本書《Cracking the Coding Interview: 189 Programming Questions and Solutions》,適合短時間內準備編程工作面試。

          下載地址:http://lib1.org/_ads/fcb49f53d5e943ce8acdc4469f63dc5d





          你練習的問題越多,準備就越充分。因此,如果你認為 48 道題不夠的話,可以查看:

          • https://javarevisited.blogspot.com/2015/02/50-programmer-phone-interview-questions-answers.html
          • http://javarevisited.blogspot.sg/2016/06/top-5-books-for-programming-coding-interviews-best.html
          • http://javarevisited.blogspot.sg/2018/02/10-courses-to-prepare-for-programming-job-interviews.html


          現在你已經準備好面試了

          這部分將介紹一些數據結構和算法之外的常見問題,可以幫助你在面試中取得更好的表現。

          我的博客中還有很多此類問題,詳見:http://www.java67.com/


          這些常見的編程、數據結構和算法問題是你去任何一家公司面試都必須知道的,不管是大公司還是小公司,不管面試的職位高或低。

          如果你正在尋找編程或軟件開發工作,那么你可以先使用這些編程問題開始準備。該列表提供了一些不錯的面試準備話題,能夠幫助你評估自己的面試準備工作是否充分。

          熟練掌握數據結構和算法知識是編程工作面試成功的關鍵,你應該更多地關注這些問題。

          擴展閱讀:

          • Data Structures and Algorithms: Deep Dive Using Java:https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fdata-structures-and-algorithms-deep-dive-using-java%2F
          • 10 Books to Prepare Technical Programming/Coding Job Interviews:http://www.java67.com/2017/06/10-books-to-prepare-technical-coding-job-interviews.html
          • 10 Algorithm Books Every Programmer Should Read:http://www.java67.com/2015/09/top-10-algorithm-books-every-programmer-read-learn.html
          • Top 5 Data Structure and Algorithm Books for Java Developers:http://javarevisited.blogspot.sg/2016/05/5-free-data-structure-and-algorithm-books-in-java.html#axzz4uXETWjmV
          • From 0 to 1: Data Structures & Algorithms in Java:https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Ffrom-0-to-1-data-structures%2F
          • Data Structure and Algorithms Analysis—Job Interview:https://click.linksynergy.com/fs-bin/click?id=JVFxdTr9V80&subid=0&offerid=323058.1&type=10&tmpid=14538&RD_PARM1=https%3A%2F%2Fwww.udemy.com%2Fdata-structure-and-algorithms-analysis%2F


          原文鏈接:https://hackernoon.com/50-data-structure-and-algorithms-interview-questions-for-programmers-b4b1ac61f5b0

          和圖的概念

          圖是一種特殊的數據結構,由點和邊構成,它可以用來描述元素之間的網狀關系,這個網狀沒有順序,也沒有層次,就是簡單的把各個元素連接起來。

          圖的概念和基本性質

          圖(graph):圖(graph)由邊(edge)的集合及頂點(vertex)的集合組成。通常記為:G=(V,E)。對于兩個圖G和G’,如果G’的頂點集合與邊集合均為G的頂點集合與邊集合的子集,那么稱G’是G的子圖。子圖實際上就是一張圖里面小一點的圖,也可以是點,不難理解。

          圖常用來表示“多對多”的關系,如常說的:六度空間理論(Six Degrees Separation)

          頂點(vertex)的屬性:

          • 度數(degree),與該頂點相關聯的總邊數,一個圖G的總度數d(V)等于總邊數2倍:2E。當圖的邊具有方向時,一個頂點又分為出度(out-degree)和入度(in-degree),出度是以該頂點為起點的邊數,入度是以該頂點為終點的邊數。
          • 階數(order),圖G中頂點集V的大小為G的階數。

          邊又稱為線(line)或弧(arc),邊(u,v)中表示u和v鄰接(adjacent),(u, v) ∈ E,

          邊(edge)的屬性:

          一條邊是一個頂點對(u,v),u, v ∈ V,按照圖的頂點對是否有序,頂點對有序的圖稱為有向圖(directed graph, digraph),此時邊(u,v)和(v,u)是兩條不同的邊,頂點對無序的圖稱為無向圖(undirected graph),此時邊(u,v)和(v,u)是兩條相同的邊,無向圖可看作一個特殊的有向圖

          具有成分的邊包含:權(weight)、值(cost/value),此時圖由可分為有權圖(weighted graph)和無權圖(unweighted graph),無權圖可以看作是所有邊權值相同的有權圖

          路徑(path),一條路徑是一個頂點序列u1, u2, u3, …, un,(ui, u(i+1)) ∈E,1<=i<n。路徑長等于路徑的邊數:n-1,不包含邊的路徑長為0。

          簡單路徑:路徑上所有頂點互異,起點和終點可以相同

          環或圈(cycle),此時u1=un,而且路徑長至少為1,有向圖(u,v)和(v,u)是一個圈,無向圖(u,v)和(v,u)通常不被認為是一個圈。其中無圈圖(acyclic graph)中沒有圈,無圈有向圖又稱為DAG(directed acyclic graph)

          • 自環邊(self loop),兩個頂點都相同的邊。
          • 重邊或平行邊(parallel edges),連接兩個頂點的邊數超過一條,又稱為多重邊(multiple edges)

          連通圖(connected graph),無向圖中每個頂點到任意頂點都存在一條路徑,連通的有向圖稱為強連通(strongly connected),非連通的有向圖,去掉方向其基礎圖(underlying graph)是連通的,則成為弱連通的(weakly connected)

          完全圖(complete graph),圖中任意一對頂點都存在一條邊

          稀疏圖(sparse graph),每個頂點的度數較小的圖


          圖的基本基本概念

          • 頂點的度:無向圖中連著頂點的邊的數目。
          • 頂點的入度和出度:有向圖中,以這個頂點為起點的邊的數量稱為這個頂點的出度;以這個頂點為終點的邊稱為這個頂點的入度。
          • 邊權:邊的費用,可以形象的理解為“過路費”。對于一張存在邊權的圖,我們稱為“帶權圖”。
          • 連通:如果圖中兩點U,V之間存在一條由U經過若干邊、點到達V的路徑,則稱U,V是連通的。
          • 回路:起點和終點相同的路徑,稱為“回路”或“環”。另外,不存在環的有向圖稱為Directed Acyclic Graph(DAG)。
          • 完全圖:每個點都與其它所有的點有連邊的圖。
          • 無向圖:圖的邊沒有方向,可以雙向。
          • 有向圖:圖的邊有方向,只能按箭頭方向從一點到另一點。
          • 網絡:帶權重的圖
          • 連通:如果從v 到w存在一條(無向)路徑,則稱v和w是連通的
          • 路徑:v到w的路徑是一系列頂點的集合,其中任意一對相鄰的頂點間都有圖中的邊。
          • 路徑的長度:是路徑中的邊數(如果帶權,則是所有邊的權重和)。如果v和w之間的所有頂點都不同,則稱簡單路徑
          • 連通圖:圖中任意兩頂點都連通
          • 連通分量:無向圖的極大連通子圖
          • 極大頂點數:再加一個頂點就不連通了
          • 極大邊數:包含子圖中所有頂點相連的所有邊
          • 強連通:有向圖中頂點v和w之間存在雙向路勁,則稱v和w是強連通的
          • 強連通圖:有向圖中任意兩頂點均強連通
          • 弱連通圖:不符合強連通圖的條件,但是若是將邊的方向都去掉,如果是連通的,則稱為弱連通圖
          • 強連通分量:有向圖的極大強連通子圖

          圖的簡單應用

          圖的應用很廣泛,這里舉幾個簡單的例子。

          • 航空系統:頂點表示機場,邊表示時間、距離或飛行的費用,一般最好有強連通的航空系統,另外常見的需求問題有:求任意兩個機場的最佳航線。
          • 交通流:頂點表示街道的交叉口或紅綠燈點,邊表示速度限度或車輛容量,這時可以求最可能參數交通瓶頸的位置,或找出一條最短路。
          • 社交網絡:頂點表示用戶,用戶的活動、推薦或好友代表邊,這樣可以表示一個完整的社交用戶網絡。
          • 電商推薦系統:頂點表示用戶已瀏覽、收藏、購物過等相關的商品,邊表示兩個商品的相似性,可表示為有權圖,權值為相似性的大小。

          另外圖論又可用于研究物理學和化學中的分子

          圖的遍歷

          1. 深度優先搜索(Depth Firsh Search, DFS):走一步,看一步,走不通后返回到上一個能走通的結點
          2. 廣度優先搜索(Breadth First Search, BFs):出隊一個,訪問一圈,訪問的同時入隊,相當于樹的層序遍歷(計劃性非常強,個人感覺用這種遍歷方式更好一些)


          本系列主要講二叉樹,關于圖,推薦閱讀文章有:

          • 數據結構與算法之圖的概念、存儲結構及遍歷方式 https://www.cnblogs.com/ivy-zheng/p/10995510.html
          • 圖的概念、存儲及遍歷 https://blog.csdn.net/qq_39914766/article/details/90182084
          • 圖論(graph theory)算法原理、實現和應用全解 www.srcmini.com/1635.html

          轉載本站文章《講透學爛二叉樹(一):圖的概念和定義—各種屬性特征淺析》,請注明出處:https://www.zhoulujun.cn/html/theory/algorithm/TreeGraph/8281.html


          主站蜘蛛池模板: 亚洲成在人天堂一区二区| 人妻内射一区二区在线视频| 日韩内射美女人妻一区二区三区| 国产人妖视频一区二区破除| 无码人妻精品一区二区蜜桃百度| 精品在线一区二区| 亚州国产AV一区二区三区伊在| 久久国产一区二区三区| 国产一区二区三区露脸| 无码少妇一区二区性色AV| 蜜桃视频一区二区| 国产精品制服丝袜一区| 精品一区二区三区免费毛片| 亚洲国产av一区二区三区丶| 精彩视频一区二区三区| 精品香蕉一区二区三区| 怡红院一区二区在线观看| 国产成人久久一区二区不卡三区| 国产在线一区二区综合免费视频| 中文字幕精品无码一区二区三区| 亚洲一区二区女搞男| 人妻内射一区二区在线视频| 精品国产一区二区三区在线| 国产成人精品第一区二区| 无码人妻精品一区二区三| 亚洲午夜精品第一区二区8050 | 国产乱码精品一区二区三区香蕉| 国产精品 视频一区 二区三区| 变态调教一区二区三区| 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 精品一区二区三人妻视频| 久久精品无码一区二区无码| 日韩在线不卡免费视频一区| 污污内射在线观看一区二区少妇| 亚洲变态另类一区二区三区 | 国产成人亚洲综合一区| 精品一区二区三人妻视频| 精品视频一区在线观看| 亚洲国产综合无码一区二区二三区| 久久久久久一区国产精品| 午夜DV内射一区二区|