定義及數學性質
定義
滿二叉樹:每個內節點都有兩個孩子。
完全二叉樹:除了最後一層葉子外的二叉樹是滿二叉樹,最後一層葉子都連續地集中在最左邊。
平衡二叉樹:樹的兩個子樹的高度差不超過1。
赫夫曼樹:帶路徑權值的樹,權值越高的越靠近根。
高度:高度不包括根結點,及如果根結點無左右子樹,則高度為0。
數學性質
性質一:高度為h的二叉樹至多有2h個葉子結點
證明略。
性質二:高度為h≥0的二叉樹至少有h+1個結點
如果要使高度為定值的二叉樹的結點數最少,則該二叉樹的每個結點只有一個子樹,即每層只有一個結點,共h個,再加上根結點,共h+1個,所以至少有h+1個結點。
性質三:高度不超過h(≥0)的二叉樹至多有2h+1-1
證明:
滿二叉樹結點最多,所以證明滿二叉樹是否滿足該性質。
當h=0時,只有根結點,即結點數為1;
假設h=k時,結點數為2k+1-1;
則當h=k+1時,由於比高度為k的二叉樹多了一層葉子,根據性質一,第k+1層最多有個2k+1葉子,所以共有2k+1+2k+1-1=2(k+1)+1-1個結點;
證畢。
性質四:含有n≥1個結點的二叉樹的高度至多為n-1
由性質二可得出。
性質五:含有n≥1個結點的二叉樹的高度至少為logn,因此其高度為Ω(logn)
根據性質三可得出。
滿二叉樹
性質一:高度為h的滿二叉樹,共有2h+1-1個結點
證明:
結點共有1+2+4+...+2h = 2h+1
性質二:共有2h個葉子
性質三:共有2h-1個內結點,內結點個數比葉子少1
證明略。
完全二叉樹
完全二叉樹是一個比較特殊的二叉樹,有著很多性質。
我們從樹根起,自上層到下層,逐層從左到右給二叉樹的所有結點編號,編號從1開始,即根結點編號為1。
性質一:第h層的從左到右第k個結點的編號為2h+k-1
該完全二叉樹是由高為h-1的滿二叉樹和第h層的k個葉子組成,h-1的滿二叉樹共有2h-1個結點,所以,h層第k個結點的編號為2h+k-1。
性質二:葉子個數或者和內結點個數相等或者多1
高度為h的完全二叉樹是由高度為h-1的滿二叉樹和k個葉子組成,由滿二叉樹的性質得出,葉子數比內結點多1。
我們通過給高為h-1的滿二叉樹增加葉子來得到完全二叉樹,當我們給左邊第一個葉子增加1個結點時,該葉子變為了內結點,而增加的結點是葉子,可以得出,葉子數沒變,而內結點數增加了一個,此時,內結點數和葉子數一樣;再增加一個結點,可以得出,葉子數增加了一個,而內結點數不變,所以此時,葉子數比內結點數多1。按照同樣的步驟依次將剩餘的葉子新增後,該性質是不變的。
性質三:通過本結點的編號可以快速得到父結點、左右孩子的編號
int parent(int i){
return i>>1;//i/2
}
int left(int i){
return i<<1;//i*2
}
int right(int i){
return (i<<1) + 1;//i*2+1
}
相關推薦
定義及數學性質
定義 滿二叉樹:每個內節點都有兩個孩子。 完全二叉樹:除了最後一層葉子外的二叉樹是滿二叉樹,最後一層葉子都連續地集中在最左邊。 平衡二叉樹:樹的兩個子樹的高度差不超過1。 赫夫曼樹:帶路徑權值的樹,權值越高的越靠近根。 高度:高度不包括根結點,及如果根結點無左右子樹,則高度
關於static變數的定義及性質的深層介紹
1.static全域性變數 我們知道,一個程序在記憶體中的佈局如圖1所示: 其中.text段儲存程序所執行的程式二進位制檔案,.data段儲存程序所有的已初始化的全域性變數,.bss段儲存程序未初始化的全域性變數(其他段中還有很多亂七八糟的段,暫且不表)。在程序的整個生命週期中,.d
泛型的基本定義及使用
turn test 出現 span color nts extend 參數類型 子類 泛型 1、 基本概念: 範例: class Point<T>{//T的類型未知 T x; T y; P
第9課 - 函數定義及調用
函數的調用 align 應用 abs end 語言 命令集 func home 第9課 - 函數定義及調用 1. makefile中的函數 (1)make 解釋器提供了一系列的函數供 makefile 調用 (2)在 makefile 中支持自定義函數實現,並調用執
變量定義及用法的特殊形式實戰
變量定義及用法的特殊形式實戰例1:經過反引號的`date`命令測試[[email protected]/* */ ~]# echo ‘`date`‘ `date` #單引號時看到啥顯示啥 [[email protected]/* */ ~]# echo "`date`"
列表的定義及方法
個數 lan nbsp 插入 刪除元素 mov log 指定 查詢 追加元素--append/extend,先看方法的說明 先看下實例理解兩個方法的區別 再看一個字符串的可能更好理解 插入元素,插入元素在指定的索引前面 查詢元素 查找元素
算力的定義及評價
相互 表現 inux 範圍 智能化 ide 內存 幾何 搜索引擎 算力:企業所有可調用計算資源的總和,涵蓋軟硬件,本地及遠程資源。 硬件包括PC,工作站和服務器等物理計算設備,智能儀器(比如示波器),以及其配套附件。軟件包括操作系統(Windows系列,Linux等),開發
swift -類的定義及使用
類的定義 self. 使用 clas dsm ret imp 類方法 trac // // main.swift // ClassDemo-06 // import Foundation println("Hello, World!")
shell腳本之函數的定義及使用
shell之函數的使用函數Function的使用 定義函數1) 函數名稱() { ... ...}2) function 函數名稱 { ... ...}調用函數 函數名稱 也可以通過位置變量的方式給函數傳遞參數 例子: 編寫腳本,實現目錄管理功能,要求使用函數 #!/bin/bash#createDir()
分布式系統定義及特點
ron 分布式系統 全局 獨立 存在 延時 span 集群 軟件 一、分布式系統定義 分布式系統是一個硬件或軟件組件分布在不同的網絡計算機上,彼此之間僅僅通過消息傳遞進行通信和協調的系統。 二、特性 1、副本(Replica)是分布式系統最常見的概念之一,指分布式系統對數
201671010142 java類與對象的定義及使用
his sta 特定 ati 過程 方法 返回 imp 參數 通過這章學習,了解到面向對象程序設計。面向對象的程序設計是有對象組成的,每個對象對用戶公開的特定功能部分和隱藏的實現部分。有類構造對象的過程稱為創建類的實例。實現封裝的關鍵在於絕對不能讓類中的方法直接地訪問其他類
ansible 角色定義及調用(nginx)
ansible 角色安裝nginxRoles的介紹 Roles是ansible自1.2版本引入的新特性,用於層次性,結構化地組織playbook,roles能夠根據層次型結構自動自動裝在變量文件、tasks以及handlers等。創建roles的步驟創建以roles命名的目錄:在roles目錄中分別創建以各
JS數組定義及詳解
多維 wan bsp 數據類型 長度 內存地址 函數 js數組 obj 1、什麽是數組 數組就是一組數據的集合 其表現形式就是內存中的一段連續的內存地址 數組名稱其實就是連續內存地址的首地址 2、關於js中的數組特點 數組定義時無需指定數據類型 數組定義時可以無需指定數
Python中函數定義及參數實例
python中函數定義及參數實例1.函數定義 函數就是完成特定功能的一個語句組,這組語句可以作為一個單位使用,並且給它取一個名字 ,可以通過函數名在程序的不同地方多次執行(這通常叫函數調用)預定義函數(可以直接使用)自定義函數(自己編寫)為什麽使用函數? 降低編程難度,通常將一個復雜的大問題分解
osi七層模型,定義及常用協議
斷點續傳 硬件 互連 tag 地址 效率 segment 校驗 mtp 一、OSI七層參考模型的含義應用層:網絡服務與最終用戶的一個接口 表示層:數據的表現形式,如加密、壓縮。 會話層:建立、管理、中止會話,例如斷點續傳。 傳輸層:定義傳輸數據的協議端口號,以及流控和差錯校
第十五期 DHCP基礎定義及配置思路
接口 表示 廣播 -s 客戶端 可用 dhcp服務器 過程 攝像 DHCP-定義-作用 -原理DHCP工作過程是 C/S ,即 客戶端/服務器模式;-設備角色區分: DHCP客戶端 -終端設備(PC、網絡攝像頭、IP電話、網絡打印機等)
C++接口定義及實現舉例
true 基本 子類 let 必須 無需 執行 bool 如果 一、接口的定義 有時候,我們得提供一些接口給別人使用。接口的作用,就是提供一個與其他系統交互的方法。其他系統無需了解你內部細節,並且也無法了解內部細節,只能通過你提供給外部的接口來與你進行通信。根據c+
Python 列表的定義及操作
語句 rabl 適合 操作 想要 所有 乘法 指定元素 sorted # 列表概念:有序的可變的元素集合 # 定義 # 直接定義 nums = [1,2,3,4,5] # 通過range函數構造,python2 和python3 版本之間
shell環境變量+特殊變量(數組的定義及增刪改查)
shell環境變量shell變量類型:(分兩類)環境變量(全局變量)和局部變量#######一般環境變量都為大寫######### 變量三種符號無引號:一般是連續的字符串,數字,路徑等可以不加任何引號‘單引號‘:所見即所得,看到的是什麽就會輸出什麽"雙引號":把雙引號內的所有內容都輸出出來
JAVA基礎學習之路(七)對象數組的定義及使用
get system turn book code null 實例 urn TE 兩種定義方式: 動態初始化: 定義並開辟數組:類名稱 對象數組名[] = new 類名稱[長度] 分布按成:類名稱 對象數組名[] = null; 對象數組名 = new 類名稱[長度]