資料結構模組
線性表
順序表:記憶體中分配連續的空間,只存資料,不需要存地址資訊,新增刪除效率低,查詢方便。
連結串列:增加刪除效率高,不會有閒置空間,但是要儲存下一個節點的編號,所以要從不同角度看節省空間這個問題。
設一棵完全二叉樹共有700個結點,求該二叉樹有幾個葉子結點?
根據“二叉樹的第i層至多有2^(i − 1)個結點;深度為k的二叉樹至多有2^k − 1個結點(根結點的深度為1)”這個性質:
因為2^9-1 < 700 < 2^10-1 ,所以這個完全二叉樹的深度是10,前9層是一個滿二叉樹,
這樣的話,前九層的結點就有2^9-1=511個;而第九層的結點數是2^(9-1)=256
所以第十層的葉子結點數是700-511=189個;
現在來算第九層的葉子結點個數.
由於第十層的葉子結點是從第九層延伸的,所以應該去掉第九層中還有子樹的結點.因為第十層有189個,所以應該去掉第九層中的(189+1)/2=95個;
所以,第九層的葉子結點個數是256-95=161,加上第十層有189個,最後結果是350個.
相關推薦
資料結構模組
線性表 順序表:記憶體中分配連續的空間,只存資料,不需要存地址資訊,新增刪除效率低,查詢方便。 連結串列:增加刪除效率高,不會有閒置空間,但是要儲存下一個節點的編號,所以要從不同角度看節省空間這個問題。 設一棵完全二叉樹共有700個結點,求該二叉樹有幾個葉子結點? 根據“二叉樹的第i
利用python的pickle模組儲存和讀寫任意的python資料結構
上文中提到PyQt的QDataStream類對Python型別和PyQt型別的資料進行讀寫操作,同樣python自身提供了標準pickle模組可對任意的python資料結構進行儲存和讀寫,當然pickle模組可以對Qt的資料型別進行儲存和讀寫。其實QDataSt
Python中的堆資料結構——heap模組
>>> import heapq >>> help(heapq) Help on module heapq: NAME heapq - Heap queue algorithm (a.k.a. priority queue).
opencv中cuda模組的資料結構簡易用法
/*------------------------------------------------------------------------- 裡面比較重要的是 InputArray;getGpuMat();PtrStepSzb; 這麼幾個資料型別和函式
Linux netfilter 學習筆記 之七 ip層netfilter的連線跟蹤模組的概念及相關的資料結構分析
核心版本 2.6.21 連線跟蹤(CONNTRACK)就是跟蹤並且記錄連線狀態。包括 TCP 、UDP、ICMP 等協議型別的連線。其主要是判斷該資料包是什麼狀態。根據資料包的源ip地址、目的ip地址、源埠、目的埠、協議號來確定一條連線。 因為連線跟蹤支援TCP
pickle——儲存python中資料結構的模組
前些天自己借用《machine learning in action》一書中的FP-Growth程式碼,實現了頻繁項集的發現和關聯規則的挖掘。由於資料量比較大,在用python跑的時候有時會出現kernel die的提示,kernel重啟後又要重新從資料庫裡讀資料、整理、發
Python資料結構 - 利用headp模組尋找最大N個元素並實現優先佇列
用headp找到最大最小的N個值 import heapq nums = [1, 8, 2, 23, 7, -4, 18, 23, 42, 37, 2] print(heapq.nlargest(3, nums)) print(heapq.nsmallest(3, nums)) [42, 37, 23]
資料結構JAVA版之棧和佇列
一、涉及的內容大綱 二、簡單介紹棧、佇列和其他資料結構的不同 1 對於其他的資料結構而言,都適用與資料庫應用中作資料記錄。但是因為棧和佇列的生命週期比那些資料庫型別的資料結構要短,所以他們只是在程式的操作期間才會建立和執行,在完成任務之後就會被銷燬。所以棧和佇列更多的是用於構思演算法的
郝斌資料結構入門--P50--遞迴
郝斌資料結構入門--P50--遞迴 定義: 一個函式自己直接或間接呼叫自己。 舉例: 1、求階乘 #include <stdio.h> //假定n的值是1或大於1的值 long f(long n) { if (1 == n)
郝斌資料結構入門---P30---棧
郝斌資料結構入門---P30---棧 線性結構的常見應用之一:棧(只能頭部插入,頭部刪除) 定義:一種可以實現“ 先進後出 ”的儲存結構,棧類似於箱子 分類:靜態棧,動態棧 演算法:出棧pop,入棧push(壓棧) 應用:函式呼叫,中斷,表示式求值,記憶體分配,
資料結構---棧(C語言陣列實現)
https://blog.csdn.net/morixinguan/article/details/51374184 資料結構---棧(C語言陣列實現) 棧的全名稱為堆疊,棧其實就是與佇列相反的過程,佇列是先進先出,而棧便是先進後出了,如下圖:
資料結構---佇列(C語言陣列實現)
https://blog.csdn.net/morixinguan/article/details/51374296 資料結構---佇列(C語言陣列實現) 佇列是先進先出的過程。簡單地畫一幅畫來描述一下佇列: 一個簡單的、由陣列實現的佇列,可以由以下幾種最基本的操
資料結構練習之用棧來遞迴實現5的階乘#C語言實現
剛學資料結構,給大家分享一下今天學習資料結構的棧中的一個練習 也算是順便記錄一下學習過程 #include <stdio.h> typedef struct StackNode { int vn; //儲存n的值 int vf; //儲存fun(n)的值 int t
資料結構——第二章棧、佇列:01棧
1.棧和佇列是限定插入和刪除只能在表的端點進行的線性表。棧是後進先出的資料結構,佇列是先進先出的資料結構(棧相當於一個瓶子,向瓶內放的物品被壓到瓶子底部,只有等上面的所有物品都出來了,下面的才能出來,這是先進後出;佇列相當於一個隧道,火車向隧道內開不能回頭,車頭先進去也先出來,這是先進先出)。 2.棧的型別
資料結構之深度尋路---地圖尋路(棧實現)
注:深度尋路用到的棧標頭檔案以及.cpp檔案 在我的資源中可下載或者Q:1286550014(免費) 深度尋路 原理:在地圖中從一個點開始,從規定方向開始走,無障礙就繼續走,資料壓棧,如果有障礙就退一步,資料出棧,直至找到終點或無終點時,尋路結束。 一、標頭檔案匯入 #i
C/C++程式設計教訓----資料結構的類型別名和memset
問題描述 學習微軟,我們經常會這樣定義資料結構, 並且定義了資料結構別名StructTest,和資料結構指標別名LPStructTest, 這樣定義也許讓程式的型別更加簡潔。 typedef _StructTest { int iVal; char csStr[100
為什麼我要放棄javaScript資料結構與演算法(第一章)—— JavaScript簡介
資料結構與演算法一直是我算比較薄弱的地方,希望通過閱讀《javaScript資料結構與演算法》可以有所改變,我相信接下來的記錄不單單對於我自己有幫助,也可以幫助到一些這方面的小白,接下來讓我們一起學習。 第一章 JavaScript簡介 眾所周知,JavaScript是一門非常強大的程式語言,不僅可以用於
(python)資料結構------列表
一、數字的處理函式 (一)int() 取整數部分,與正負號無關,舉例如下: 1 print(int(-3.6), int(-2.5), int(-1.4)) 2 print(int(3.6), int(2.5), int(1.4))執行結果如下: -3 -2 -1 3 2 1 (二)/
php演算法題(資料結構)
單鏈表的實現 // 單鏈表的操作 public function index() { $list = new \singleLink(); $list->addNode(new \Node(1,'a')); $list->addNode(new \Node(3,'c')
野生前端的資料結構基礎練習(5)——雜湊
網上的相關教程非常多,基礎知識自行搜尋即可。 習題主要選自Orelly出版的《資料結構與演算法javascript描述》一書。 參考程式碼可見:https://github.com/dashnowords/blogs/tree/master/Structure/Hash 雜湊的基本知識