1. 程式人生 > >【證明】—— 二叉樹的相關證明

【證明】—— 二叉樹的相關證明

0. 簡單結論

  • 對於堆,子樹的最大節點數為 2/3n;(樹的最底層恰好半滿)
    • 0 層節點數:20=1
    • 1層節點數:21=2
    • m-1 層節點數:2m1,一半有左右孩子,2m2,左右孩子也即底部的葉子節點的數量 2m1
      • 前 m-1 層(排除掉最底層)節點數為 2m1,前 m1 層,左邊節點右邊節點 (2m1)/2

1. 數學歸納法

  • 高度為 n 的二叉樹,葉子結點不多於 2n

    數學歸納法,證明三部曲:

    • n=0,只有一個根節點,則葉子結點也為此根節點,為 1,不多於 20
    • 令高度為 k,葉子結點不多於

      2k,我們需證明:高度為 k+1 時,葉子結點不多於 2k+1

      高度為 k+1 時,考慮其左右孩子,則其左右孩子(也即左右子樹),高度不高於 k,則左右孩子葉子節點數也均不高於 2k,即左子樹,樹高不高於 k,葉子結點數不高於 2k,右子樹,樹高不高於 k,葉子結點數不高於 2k,則總的葉子節點數:2k+2k=2k=1

2. 二叉堆

  • 任意一個正整數 n,均可拆分為 n=(2m1)+km 為能取得的最大整數),對於包含 n 個節點的堆,前 m1 層的節點數為 i=0m12i=2m1,最底層有 k 個葉子節點,並非整個二叉樹有 k 個葉子節點;
  • 高度為 h 的堆中,元素個數最多最少分別是多少?

    考慮高度為 h1 和高度為 h 的滿二叉樹。

    • 對於高度為 h1 的滿二叉樹,樹中節點的個數為:i=0h12i=2h1(全1二進位制數),
    • 高度為 h 的滿二叉樹,樹中節點個數為:i=0h2i=2h+11

    則高度為 h1 滿二叉樹節點數+1,即

    相關推薦

    證明—— 相關證明

    0. 簡單結論 對於堆,子樹的最大節點數為 2/3n;(樹的最底層恰好半滿) 0 層節點數:20=120=1 1層節點數:21=221=2 m-1 層節點數:2m−12m−1,一半有左右孩子,2m

    面試題相關

    1.二叉樹 二叉樹是每個節點最多有兩個子樹的樹結構 滿二叉樹:除葉子節點外,所有節點的度都為2 完全二叉樹:葉子結點只能出現在最下兩層;最下層的葉子一定集中在左部連續位置;倒數二層,若有葉子結點,一定都在右部連續位置;如果結點度為1 ,則該結點只有左孩子,即

    面試題相關面試題

    判斷二叉樹是否是平衡二叉樹 可以分兩步實現。第一步先遍歷二叉樹中的每一個結點node,呼叫height()求出該結點的左子樹高度height(node.left) 和 右子樹高度 height(node.right)。根據左右子樹的高度差是否滿足其絕對值不超

    面試筆試相關操作

    // 二叉樹 // 2015.08.07 //@ author :braveji /** 二叉樹的功能 ** 1 建立二叉樹 銷燬二叉樹 ** 2 二叉樹的遍歷:前、中、後,層,分層;遞迴、非遞迴; ** 3 二叉樹的高度、寬度、葉子節點個數 ** 4 將二叉搜尋樹轉換為雙

    leetcode94的中序遍歷

    寫在最前面: 很常規的一道二叉樹的基本操作,最偷懶的辦法是遞迴,不需要想那麼多。 給定一個二叉樹,返回它的中序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2] 進階: 遞

    演算法前序、中序、後序遍歷相互求法(轉)

    二叉樹前序、中序、後序遍歷相互求法 原文地址      今天來總結下二叉樹前序、中序、後序遍歷相互求法,即如果知道兩個的遍歷,如何求第三種遍歷方法,比較笨的方法是畫出來二叉樹,然後根據各種遍歷不同的特性來求,也可以程式設計求出,下面我們分別說明。  

    演算法的遞迴和非遞迴遍歷(轉)

    原文地址 【寫在前面】   二叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序、中序以及後序三種遍歷方法。因為樹的定義本身就 是遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且程式碼很簡潔。而對於樹的遍歷若採用非遞迴的方法,就要採

    演算法的廣度遍歷

    廣度優先遍歷的核心思想如下:從根節點開始遍歷,然後遍歷其子節點,再從左至右的,依次遍歷其孫子節點的,以此類推,直到完成整顆二叉樹的遍歷。          50    20        &nbs

    數論的基礎知識

    性質 在二叉樹的第i層上最多有2i-1個結點。 深度為k的二叉樹至多有2k-1個結點。 對於任意一棵二叉樹,如果其葉節點數為n0,度為2的結點數為n2,則一定滿足n0 = n2 + 1。 具有n個結點的完全二叉樹的深度為floor(log2n + 1)。 對於任意一棵具有n個結點

    模板的遍歷

    目錄   先序遍歷 中序遍歷 後序遍歷 按層遍歷     先序遍歷   先遍歷根結點,再遍歷左結點,最後遍歷右結點。 int n; int lt[MAX_N], rt[MAX_N]; // 如果沒有則為-1

    LeetCode的前序遍歷

    題目 給定一個二叉樹,返回它的 前序 遍歷。 示例: 輸入: [1,null,2,3] 1     \        2     / 3 public class Solution { p

    leetcode的最大深度。

    題目要求 二叉樹最大深度 給定一個二叉樹,找出其最大深度 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數 說明:葉子節點是指沒有子節點的節點 示例: 給定二叉樹:[3,9,20,null,null,15,7] 返回它的最大深度 3。

    leetcode的遍歷。

    題目要求 二叉樹的遍歷。 核心思想 利用佇列的特性來實現二叉樹的遍歷。 完整程式碼如下 import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.

    c++的線索化

    什麼是二叉樹的線索化?或者問什麼是線索二叉樹? 按照某種遍歷方式對二叉樹進行遍歷,可以把二叉樹中所有結點排序為一個線性序列。在改序列中,除第一個結點外每個結點有且僅有一個直接前驅結點;除最後一個結點外

    模板合集

    1501 二叉樹最大寬度和高度 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 白銀 Silver 題解 題目描述 Description 給出一個二叉樹,輸出它的最大寬度和高度。 輸入描述 Input Descr

    劍指offer題解C++24中和為某一值的路徑

    題目描述 輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。 解題思路 按照先序遍歷將結點加入路徑,如果當前結點是葉子結點則判斷當前路徑和是否為目標數,若滿足條件

    LeetCodePython的最大深度

    題目給定一個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明: 葉子節點是指沒有子節點的節點。示例:給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返

    演算法的遞迴遍歷C語言實現

    二叉樹是一種極其重要的資料結構,以下是二叉樹的結構定義 建立 和遞迴先序 中序 後序 遍歷的程式碼. #include<stdio.h> #include<stdlib.h> typedef char ElemType; /*二叉樹節點資料

    leetcode的鋸齒形層次遍歷

    問題描述: 給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。 例如: 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 / \

    原創的建立與遍歷(前序遍歷、中序遍歷、後序遍歷)

    二叉樹的建立與遍歷(binary-tree) 題目描述 給出一棵二叉樹,分別輸出先序、中序、後序遍歷結果。 輸入 第一行:結點數n(1<=n<=100)。 以下n行,每行3個整數,分別表