1. 程式人生 > >定義及數學性質

定義及數學性質

定義

滿二叉樹:每個內節點都有兩個孩子。

完全二叉樹:除了最後一層葉子外的二叉樹是滿二叉樹,最後一層葉子都連續地集中在最左邊。

平衡二叉樹:樹的兩個子樹的高度差不超過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+...+22h+1

-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 類名稱[長度]