在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

二叉樹,一種基礎的數據結構類型

8g3K_AI_Thinker ? 來源:lp ? 2019-04-13 10:48 ? 次閱讀

作為數據結構的基礎,樹分很多種,像AVL樹、紅黑樹、二叉搜索樹....今天我想分享的是關于二叉樹,一種基礎的數據結構類型。

01

什么是樹

在《數據結構》[注1]中樹有如下定義:

樹是 n(n≥0) 個結點的有限集

在此我對上述定義做出如下解釋:

當n=0n=0時,為空樹,樹的深度與高度均為00,是樹的一種特例;當n>0n>0時,為非空樹,樹的第一個結點,即深度為11的結點,我們稱其為根結點,由根結點可以引出若干子樹分支,同時子樹分支可依此向下延伸,此時樹的深度與高度也在變化,即樹狀圖。

這里我們需要厘清樹的深度與樹的高度與其他樹的術語:

樹的深度:樹中結點的最大層次

樹的高度:從葉子結點開始定義,葉子結點為第一層,往上依次遞增,直至根結點。

結點:樹的結點包含一個數據元素以及若干指向其子樹的分支

度:結點所擁有的子樹數量

終端節點:度為0的結點稱為葉子結點或終端結點

樹的度:樹中各結點度的最大值

層次:從根開始定義,根為第一層,依次遞增

有序樹:樹中結點的各子樹從左往右是有次序的,不可相互交換;反之則是無序樹

森林:一棵非空樹刪掉根結點,即是森林

02

二叉樹的概念引入

二叉樹是由樹演化而來的一種數據結構,上面所有術語均適用于二叉樹。二叉樹與樹不同之處在于,樹的每一個結點(除終端結點外)允許有若干子樹分支;而二叉樹只允許有左右兩個子樹分支,即不存在度大于2結點。

C語言示例:

上面的示例清晰地闡明了二叉樹的結點是由一個數據元素和兩個子樹分支構成,需要明確的是,雖然終端結點沒有指向任何子樹,但它仍舊有往下繁衍的能力。

除此之外,二叉樹還是一棵有序樹,它的各個結點從左到右是依次有序可循的,且不可交換;它具有以下五種形態:

空樹

僅有根結點

左子樹為空

右子樹為空

左右子樹均非空

當二叉樹處于第五種狀態,且設樹的深度為n,總結點數為?時,我們稱其為滿二叉樹。

??事實上還有另外一種也處于第五狀態的樹——完全二叉樹。由于完全二叉樹的定義在每個版本的教科書中均不相同,而筆者只接觸過《數據結構·嚴蔚敏版》,因此摘錄此書中對完全二叉樹的定義:

深度為k的,有n個結點的二叉樹,當且僅當其每一個結點都與深度為k的滿二叉樹中編號從1至n的結點一一對應時,稱之為完全二叉樹。

這段描述我讀了兩遍,方才理解其中的深刻含義,我們把深度為3的滿二叉樹的每個結點從上往下,從左往右進行編號:??

然后我們再定義一棵深度也為3的二叉樹,該二叉樹的n 個結點(n≤7),當從1到n的每個結點都與上圖中的編號結點一一對應時,這二叉樹就稱為完全二叉樹。

舉個例子,當n=5時:

這便是完全二叉樹。

因此我們還可以得到一個推論:滿二叉樹是完全二叉樹,但完全二叉樹不一定是滿二叉樹。

當二叉樹處于第三種狀態時,稱其為右斜樹。

同理,處于第四狀態為左斜樹。

????03

二叉樹的性質總結

二叉樹的第i 層上最多有個結點。此性質可通過上面滿二叉樹的圖示推得

深度為n 的二叉樹,最多擁有?個結點。此性質可以通過數列求和得出:

設滿二叉樹深度為 n,葉子結點數必為

設任意一棵二叉樹的葉子結點數為n0,度為1的結點數為n1,度為2的結點數為n2;總結點數為n。則有:

設分支的總邊數為x,則有:

聯立上述三式可得:

即任意二叉樹的葉子結點數為該樹中度為2的結點數的總和加一。

設一完全二叉樹具有n個結點,則其深度必為,[x]?表示不大于?x?的最大整數,即向下取整。

04

手把手建立二叉樹

C語言示例:

其中需要指明的是二叉樹的三種遍歷方法:先序遍歷、中序遍歷、后序遍歷。

先序遍歷

即遍歷順序為“根—>左->右”。

中序遍歷

即遍歷順序為“左—>根—>右”,由于二叉樹為有序樹,因此中序遍歷輸出的值由小到大的。

后序遍歷

即遍歷順序為“左—>右—>根”。

還有一種遍歷法,稱為層序遍歷,有興趣的讀者可以嘗試著寫一下。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40132
  • 二叉樹
    +關注

    關注

    0

    文章

    74

    瀏覽量

    12325

原文標題:二叉樹的原理推敲與動手種樹

文章出處:【微信號:AI_Thinker,微信公眾號:人工智能頭條】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于二叉樹的時序電路測試序列設計

    為了實現時序電路狀態驗證和故障檢測,需要事先設計個輸入測試序列。基于二叉樹節點和樹枝的特性,建立時序電路狀態二叉樹,按照電路二叉樹節點(狀態)與樹枝(輸入)的層次邏輯
    發表于 07-12 13:57 ?0次下載
    基于<b class='flag-5'>二叉樹</b>的時序電路測試序列設計

    二叉樹層次遍歷算法的驗證

    實現二叉樹的層次遍歷算法,并對用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”創建的二叉樹進行測試。
    發表于 11-28 01:05 ?2100次閱讀
    <b class='flag-5'>二叉樹</b>層次遍歷算法的驗證

    關于二叉樹數據結構和算法相關的題目

    最近總結了數據結構和算法相關的題目,這是第篇文章,關于二叉樹的。
    的頭像 發表于 02-07 13:57 ?3206次閱讀

    4中二叉樹的遍歷方式介紹

    對于一種數據結構而言,遍歷是常見操作。二叉樹一種基本的數據結構,是一種每個節點的兒子數目都不多于2的
    的頭像 發表于 04-27 17:23 ?4765次閱讀
    4中<b class='flag-5'>二叉樹</b>的遍歷方式介紹

    詳解電源二叉樹到底是什么

    作為數據結構的基礎,分很多種,像 AVL 、紅黑二叉搜索....今天我想分享的是關于
    的頭像 發表于 06-06 15:05 ?1w次閱讀
    詳解電源<b class='flag-5'>二叉樹</b>到底是什么

    紅黑(Red Black Tree)是一種自平衡的二叉搜索

    平衡(Balance):就是當結點數量固定時,左右子樹的高度越接近,這棵二叉樹越平衡(高度越低)。而最理想的平衡就是完全二叉樹/滿二叉樹,高度最小的二叉樹
    的頭像 發表于 07-01 15:05 ?5717次閱讀
    紅黑<b class='flag-5'>樹</b>(Red Black Tree)是<b class='flag-5'>一種</b>自平衡的<b class='flag-5'>二叉</b>搜索<b class='flag-5'>樹</b>

    二叉樹操作的相關知識和代碼詳解

    數據結構中的重中之重,尤其以各類二叉樹為學習的難點。在面試環節中,二叉樹也是必考的模塊。本文主要講二叉樹操作的相關知識,梳理面試常考的內
    的頭像 發表于 12-12 11:04 ?2051次閱讀
    <b class='flag-5'>二叉樹</b>操作的相關知識和代碼詳解

    二叉樹的前序遍歷非遞歸實現

    通過下面這個動畫復習二叉樹的前序遍歷。 迭代遍歷 我們試想下,之前我們借助隊列幫我們實現二叉樹的層序遍歷, 那么可不可以,也借助數據結構
    的頭像 發表于 05-28 13:59 ?1965次閱讀

    數據結構與算法分析中的二叉樹與堆有關知識匯總

    該資料包括數據結構與算法分析中的二叉樹與堆有關的些知識
    發表于 11-03 09:37 ?0次下載

    C語言數據結構:什么是二叉樹

    完全二叉樹:完全二叉樹是效率很高的數據結構。對于深度為K,有n個節點的二叉樹,當且僅當每個節點都與深度為K的滿
    的頭像 發表于 04-21 16:20 ?2520次閱讀

    怎么就能構造成二叉樹呢?

    直跟著公眾號學算法的錄友 應該知道,我在二叉樹:構造二叉樹登場!,已經講過,只有 中序與后序 和 中序和前序 可以確定顆唯
    的頭像 發表于 07-14 11:20 ?1593次閱讀

    使用C語言代碼實現平衡二叉樹

    這篇博客主要總結平衡二叉樹,所以,二叉排序樹知識不會提及,但是會用到。
    的頭像 發表于 09-21 11:00 ?1099次閱讀

    二叉樹的代碼實現

    二叉樹的主要操作有遍歷,例如有先序遍歷、中序遍歷、后序遍歷。在遍歷之前,就是創建二叉樹,當然,還需要有刪除二叉樹的算法。
    的頭像 發表于 01-18 10:41 ?1235次閱讀
    <b class='flag-5'>二叉樹</b>的代碼實現

    C++構建并復制二叉樹

    使用C++構建二叉樹并復制、輸出。
    的頭像 發表于 01-10 15:17 ?1026次閱讀
    C++構建并復制<b class='flag-5'>二叉樹</b>

    C++自定義二叉樹并輸出二叉樹圖形

    使用C++構建二叉樹并輸出。
    的頭像 發表于 01-10 16:29 ?1755次閱讀
    C++自定義<b class='flag-5'>二叉樹</b>并輸出<b class='flag-5'>二叉樹</b>圖形
    主站蜘蛛池模板: 黄色伊人| 亚洲黄色小说网站| 天天舔天天操| 国产yw855.c免费视频| 在线免费观看一级毛片| 欧美一级乱理片免费观看| 377p亚洲欧洲日本大胆色噜噜| 99精品福利| 无人区理论片手机看片| 国产20岁美女一级毛片| 国产伦精品一区二区三区女| 99久久99久久精品免费看子伦 | 91成人在线播放| 完全免费在线视频| 四虎国产在线| 一级特黄aaa大片| 亚洲综合一区二区三区| 欧美日韩一级视频| 色456| 亚洲mm8成为人影院| 泰国一级毛片aaa下面毛多| 97色在线视频观看香蕉| 在线免费视频一区二区| 欧美成人性色xxxxx视频大| 色综合久久98天天综合| 最新色视频| 丁香六月婷婷在线| xxxxxhd69日本护士| 五月天丁香色| 51久久| 年下攻高h好涨| 国产一区二区三区影院| 亚洲最色网| 人人爽人人爱| 国内自拍2021| 三级黄色片在线播放| 奇米影视四色7777久久精品| 业余性自由色xxxx视频| 一区二区三区午夜| 久久婷婷激情| h录音 国产 在线|