數據結構之樹【完善中】

一、樹的概念

樹是一種分組的層次結構。

樹的定義:

樹是n(n>=0)個數據元素的集合,在任意一棵非空樹中,有如下特征

  1. 有且只有一個根結點(無前驅結點)
  2. 當n>1時,其他結點被分為若干個互不相交集合,并且每個集合又是一棵樹

我們可以看到樹的定義引用了集合的概念和迭代的概念。

二、樹的表示方法

  1. 文氏圖
  2. 圓括號
  3. 凹入法
  4. 樹形圖

三、基本術語

  1. 結點:樹的結點包含一個數據元素和若干指向其他子樹的分支
  2. 結點的度:結點的子節點的個數
  3. 樹的度:樹的所有結點的度的最大值
  4. 葉子結點:結點的度為0的結點
  5. 分支結點:結點的度不為0的結點
  6. 兄弟結點:同一個父結點下的子節點稱為兄弟結點
  7. 層數:根節點的層數為1,其他結點的層數為父節點的層數加1
  8. 樹的深度:所有結點層數的最大值
  9. 森林:零棵或者有限棵互不相交的樹稱為森林
  10. 有序樹和無序數:結點的各子節點從左到右無序(可以互換)的樹稱之為無序樹,否則稱為有序樹

四、二叉樹

1、二叉樹的定義

一種特殊的樹,除了有樹的特征外,還有如下特征:

  1. 當結點數大于0時,該樹由根節點和兩個子樹組成,分別稱之為左子樹和右子樹
  2. 左子樹和右子樹又是二叉樹

2、二叉樹的基本操作

  1. CreateTree創建一棵二叉樹
  2. ShowTree用凹入法或者圓括號法顯示一棵二叉樹
  3. PreOrder按照先序(根,左,右)遍歷一棵二叉樹上的所有結點
  4. InOrder按照中序(左,根,右)遍歷一棵二叉樹上的所有結點
  5. PostOrder按照后序(左,右,根)遍歷一棵二叉樹上的所有結點
  6. LevelOrder按層次遍歷一棵二叉樹上的所有結點
  7. Leafnum求一棵二叉樹上的所有葉子結點
  8. TreeDepth求一棵二叉樹的深度

3、二叉樹的性質

  • 一棵二叉樹的第i層至多有2分之i-1個結點
  • 深度為h的一棵二叉樹至多有2分之h-1個結點
  • 對于一棵有n個結點的完全二叉樹,若按照滿二叉樹的方式對結點進行編號,對于任意編號為i的結點,有如下性質
  1. i等于1的結點為根結點,當i>1時,該結點的父節點編號為i/2
  2. 當2i<=n時,該結點的左子結點編號為2i,當2i>n時,該結點沒有左子節點
  3. 當2i+1<=n時,該結點的右子節點編號為2i+1,當2i+1>n時,該結點沒有右子節點
  • 具有n(n>0)個結點的完全二叉樹,其深度為floor(log2n)+1,floor表示向下取整
  • 對于一棵非空的二叉樹,設結點的度為0,1,2的結點的個數分別為n0,n1,n2,那么有:n0=n2+1

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530355.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

phpgif圖片包_PHP生成GIF動態圖片驗證碼

1 <?php2 /**3 * 調用示例4 **/5 session_start();6 $randCode ;7 //驗證碼隨機8 $str"abcdefghjkmnpqrstuvwsyzABCDEFGHJKMNPQRSTUVWSYZ23456789";9 for($i0;$i<4;$i){10 $safe.substr($str,rand(0,strlen($str)),1);11 }12 $_SESSION["imgcode"]…

工程圖標注粗糙度_Inventor教程之工程圖標注實例

1工程圖標注實例對以下實體零件進行全部的標注演示。操作步驟如下&#xff1a;(1)打開文件。運行Inventor&#xff0c;單擊“快速入門”選項卡“啟動”面板上的“打開”按鈕&#xff0c;在“打開”對話框中選擇“實體零件”&#xff0c;單擊“打開”按鈕進入實體零件。(2)新建工…

Oracle數據庫 invalid character問題解決

今天使用PL/SQL Developer這個工具來操作Oracle數據時發現了一個問題&#xff1a; select * from tb_student_grade pivot(max(grade) for course in(math as 數學,chinese as 語文,english as 英語)); 執行這個SQL語句提示invalid character,原因是我的數據庫編碼是AMERICAN…

定時線程_SpringBoot定時任務,@Async多線程異步執行

一、使用SpringBoot實現定時任務這個不是重點&#xff0c;就簡單的實現一下&#xff0c;至于cron表達式怎么寫也不是重點&#xff0c;自行百度即可。1-1、基于 Scheduled 注解的方式import org.springframework.scheduling.annotation.EnableScheduling;import org.springframe…

SpringBoot入門一

SpringBoot能夠很簡單的創建一個直接運行的單體Spring應用 特性&#xff1a; 單體Spring應用內置的tomcat、Jetty提供默認的starter來構建配置自動配置Spring和第三方庫 推薦一個很好的學習教程&#xff0c;https://blog.csdn.net/u010486495/article/details/79348302 1 構…

mysql怎么把datetime類型轉換_mysql怎樣實現time轉datetime

mysql實現time轉datetime的方法&#xff1a;使用在sql語句中【FROM_UNIXTIME(時間值)】&#xff0c;代碼為【insert into test(time) values(FROM_UNIXTIME(%d))",time(NULL)】。mysql實現time轉datetime的方法&#xff1a;FROM_UNIXTIME(time(NULL))將liunx系統的time_t類…

SpringBoot入門二

參考Spring Boot Starters - 御坂研究所 創建自己的starter starter是依賴的一種synthesize&#xff08;合成&#xff09;。 starter會把需要用到的依賴全部包含進來&#xff0c;避免開發者自己手動引入依賴。 starter的邏輯 pom.xml<parent><groupId>org.spri…

Tomcat入門

一&#xff0c;tomcat啟動 雙擊startup.bat,如果出現一閃而過的情況&#xff0c;在文件的末尾添加pause&#xff0c;就可以看到環境變量設置的路徑是否正確 如果無法在電腦的高級系統設置中設置環境變量&#xff0c;可以在setclasspath.bat中設置環境變量 set JAVA_HOMEC:\P…

php mysql 圖像_將圖像插入MySQL并使用PHP檢索圖像

此文可能比較繁瑣&#xff0c;有更好的方法&#xff0c;但是出于教程目的&#xff0c;這是我的"“最佳實踐”的路線。今天&#xff0c;我們將討論一個似乎每個人都有些困惑的話題……在MySQL中存儲BLOB圖像&#xff0c;然后使用PHP再次顯示它們。盡管始終建議不要這樣做&a…

利用Maven逆向工程生成mybatis映射文件

一&#xff0c;pom.xml 注意修改逆向工程配置文件的路徑 <build><pluginManagement><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1…

mysql update多個表_mysql update 多表 (復制)

定我們有兩張表&#xff0c;一張表為Product表存放產品信息&#xff0c;其中有產品價格列Price&#xff1b;另外一張表是ProductPrice表&#xff0c;我們要將ProductPrice表中的價格字段Price更新為Price表中價格字段的80%。在Mysql中我們有幾種手段可以做到這一點&#xff0c;…

ORA-00907:missing right parenthesis缺少右括號

一&#xff0c;有嵌套查詢&#xff0c;并且子查詢中用了union all合并兩個查詢時&#xff0c;前一個查詢用了order by&#xff0c;那么會報錯并提示ORA-00907:missing right parenthesis缺少右括號&#xff1a; select * from ( select t.* from emp t where t.jobMANAGER ord…

mysql重復記錄大于十的數據庫_面試官:在使用mysql數據庫時,遇到重復數據怎么處理?...

前言前段時間&#xff0c;很多人問我能不能寫一些數據庫的文章&#xff0c;正好自己在測試mysql數據庫性能的時候&#xff0c;出現了一個問題&#xff0c;也就是出現了很多重復的數據&#xff0c;想起來自己long long ago寫過一篇類似的&#xff0c;僅此就拿來總結了一下。如果…

線程組的概念

一&#xff0c;線程組和線程的結構&#xff1a;樹形結構 每個Thread必然存在于一個ThreadGroup中&#xff0c;Thread不能獨立于ThreadGroup存在。 執行main()方法線程的名字是main 如果在new Thread時沒有顯式指定&#xff0c;那么默認將父線程&#xff08;當前執行new Threa…

mysql中ak替換鍵_數據庫:唯一性約束_alternate key(替換鍵) mySQL Oracle 數據庫 ak 唯一性約束...

數據庫:唯一性約束_alternate key(替換鍵) mySQL Oracle 數據庫 ak 唯一性約束數據庫:唯一性約束所謂唯一性約束(unique constraint)不過是數據表內替代鍵的另一個名稱而已。替代鍵(alternate key)可以是數據表內不作為主鍵的其他任何列&#xff0c;只要該鍵對該數據表唯一即可…

Oracle自定義類型

Oracle自定義類型可以通過type/create type來聲明或者創建 一&#xff0c;四種創建方式 1.1&#xff0c;使用create type創建object類型 create or replace type obj_type as object(id number,name varchar2(50 byte),birthday date); 1.2&#xff0c;使用create type創建…

Oracle/mysql查詢語句的執行過程

執行順序 from on join/pivot/unpivot(mysql沒有pivot和unpivot) where group by having select distinct order by limit&#xff08;oralce沒有&#xff09; 書寫順序 select distinct <select_list> from <left_table> <join_type>join <righ…

mysql定時sql腳本_定時執行的SQL腳本

因為要同步一個表&#xff0c;所以每天要同步一次數據&#xff0c;但是對SQL不是精通的我&#xff0c;為了測試寫了一段代碼來測試定時功能創建一個存儲過程&#xff0c;是用來插數據的&#xff0c;沒有輸出和輸出參數create or replace procedure temp_pro asbegininsert into…

mysql xml語句_Mysql語句

xml文件轉義字符處理(1)(2)直接寫轉義后的字符1、mysql里批量修改表內某個字段內的部分數據UPDATE inventory_stockSET batchno REPLACE(batchno,-20-201901,-50-2019)2、ON DUPLICATE KEY UPDATE根據主鍵判斷是新增還是修改(也可以有兩個或多個主鍵)INSERT INTO TABLE (a,c) …

destoon網站mysql分表_destoon : 常用數據庫操作

destoon在初始化系統后系統會自動連接數據庫&#xff0c;并將數據庫操作對象保存在$db。對于數據庫操作方法參考include/db_mysql.class.php函數原型&#xff0c;我來寫幾個常用數據庫操作。1、讀取單條信息$S $db->get_one("SELECT * FROM {$DT_PRE}table WHERE xxxy…