亚洲av成人精品日韩一区,97久久久精品综合88久久,玩弄japan白嫩少妇hd,亚洲av片不卡无码久久,玩弄人妻少妇500系列

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

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

3天內(nèi)不再提示

二叉樹,一種基礎的數(shù)據(jù)結(jié)構(gòu)類型

8g3K_AI_Thinker ? 來源:lp ? 2019-04-13 10:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作為數(shù)據(jù)結(jié)構(gòu)的基礎,樹分很多種,像AVL樹、紅黑樹、二叉搜索樹....今天我想分享的是關于二叉樹,一種基礎的數(shù)據(jù)結(jié)構(gòu)類型。

01

什么是樹

在《數(shù)據(jù)結(jié)構(gòu)》[注1]中樹有如下定義:

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

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

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

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

樹的深度:樹中結(jié)點的最大層次

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

結(jié)點:樹的結(jié)點包含一個數(shù)據(jù)元素以及若干指向其子樹的分支

度:結(jié)點所擁有的子樹數(shù)量

終端節(jié)點:度為0的結(jié)點稱為葉子結(jié)點或終端結(jié)點

樹的度:樹中各結(jié)點度的最大值

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

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

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

02

二叉樹的概念引入

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

C語言示例:

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

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

空樹

僅有根結(jié)點

左子樹為空

右子樹為空

左右子樹均非空

當二叉樹處于第五種狀態(tài),且設樹的深度為n,總結(jié)點數(shù)為?時,我們稱其為滿二叉樹。

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

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

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

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

舉個例子,當n=5時:

這便是完全二叉樹。

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

當二叉樹處于第三種狀態(tài)時,稱其為右斜樹。

同理,處于第四狀態(tài)為左斜樹。

????03

二叉樹的性質(zhì)總結(jié)

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

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

設滿二叉樹深度為 n,葉子結(jié)點數(shù)必為

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

設分支的總邊數(shù)為x,則有:

聯(lián)立上述三式可得:

即任意二叉樹的葉子結(jié)點數(shù)為該樹中度為2的結(jié)點數(shù)的總和加一。

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

04

手把手建立二叉樹

C語言示例:

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

先序遍歷

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

中序遍歷

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

后序遍歷

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    關于二叉樹數(shù)據(jù)結(jié)構(gòu)和算法相關的題目

    最近總結(jié)了數(shù)據(jù)結(jié)構(gòu)和算法相關的題目,這是第篇文章,關于二叉樹的。
    的頭像 發(fā)表于 02-07 13:57 ?3386次閱讀

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

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

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

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

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

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

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

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

    二叉樹的前序遍歷非遞歸實現(xiàn)

    通過下面這個動畫復習二叉樹的前序遍歷。 迭代遍歷 我們試想下,之前我們借助隊列幫我們實現(xiàn)二叉樹的層序遍歷, 那么可不可以,也借助數(shù)據(jù)結(jié)構(gòu)
    的頭像 發(fā)表于 05-28 13:59 ?2178次閱讀

    數(shù)據(jù)結(jié)構(gòu)與算法分析中的二叉樹與堆有關知識匯總

    該資料包括數(shù)據(jù)結(jié)構(gòu)與算法分析中的二叉樹與堆有關的些知識
    發(fā)表于 11-03 09:37 ?0次下載

    C語言數(shù)據(jù)結(jié)構(gòu):什么是二叉樹?

    完全二叉樹:完全二叉樹是效率很高的數(shù)據(jù)結(jié)構(gòu)。對于深度為K,有n個節(jié)點的二叉樹,當且僅當每個節(jié)點都與深度為K的滿
    的頭像 發(fā)表于 04-21 16:20 ?3673次閱讀

    怎么就能構(gòu)造成二叉樹呢?

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

    使用C語言代碼實現(xiàn)平衡二叉樹

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

    二叉樹的代碼實現(xiàn)

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

    C++構(gòu)建并復制二叉樹

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

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

    使用C++構(gòu)建二叉樹并輸出。
    的頭像 發(fā)表于 01-10 16:29 ?2038次閱讀
    C++自定義<b class='flag-5'>二叉樹</b>并輸出<b class='flag-5'>二叉樹</b>圖形