色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    瀏覽量

    40123
  • 二叉樹
    +關注

    關注

    0

    文章

    74

    瀏覽量

    12324

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

文章出處:【微信號: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 ?2096次閱讀
    <b class='flag-5'>二叉樹</b>層次遍歷算法的驗證

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

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

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

    對于一種數據結構而言,遍歷是常見操作。二叉樹一種基本的數據結構,是一種每個節點的兒子數目都不多于2的
    的頭像 發表于 04-27 17:23 ?4755次閱讀
    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 ?5700次閱讀
    紅黑<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 ?2039次閱讀
    <b class='flag-5'>二叉樹</b>操作的相關知識和代碼詳解

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

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

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

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

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

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

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

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

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

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

    二叉樹的代碼實現

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

    C++構建并復制二叉樹

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

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

    使用C++構建二叉樹并輸出。
    的頭像 發表于 01-10 16:29 ?1743次閱讀
    C++自定義<b class='flag-5'>二叉樹</b>并輸出<b class='flag-5'>二叉樹</b>圖形
    主站蜘蛛池模板: 国产三级视频在线| 日本后进式猛烈xx00动态图 | 国产精品手机在线视频| 国产成人v视频在线观看| 丰满少妇69激懒啪啪无码| 成人国产精品玖玖热色欲| zoovideo人与驴mp4| 村上里沙快播| 国产精品久久久久久亚洲毛片 | 18美女腿打开无遮软件| 最新在线黄色网址| 97人妻丰满熟妇AV无码| 97视频在线观看免费视频| a级毛片高清免费视频| 超碰人人澡人人胔| 国产成人在线免费| 国语精彩对白2021| 开心色99xxxx开心色| 青草国产超碰人人添人人碱| 色色色五的天| 亚洲AV福利天堂一区二区三 | 青青草视频在线ac| 甜性涩爱下载| 一本道手机无码在线看| 8050午夜二级一片| 成人精品在线视频| 韩国污动漫无遮掩无删减电脑版| 99久久婷婷国产综合精品青草| 97视频免费观看| 好吊射视频988gaocom| 欧美日韩国产高清综合二区| 亚洲精品一区国产欧美| 成人天堂资源WWW在线| 久久综合中文字幕佐佐木希| 亚洲 视频 在线 国产 精品| xiao776唯美清纯| 老女老肥熟国产在线视频| 亚洲精品无码久久久久A片空| 德国美女密密麻麻浓毛| 欧美黑人经典片免费观看| 中国成人在线视频|