嵌入式第二十三課 !!!樹結構與排序(時間復雜度)

二叉樹

概念 ?

樹是 n(n >= 0) 個結點的有限集合。若 n=0 ,為空樹。

? 在任意一個非空樹中:? ? ? ? ? ?

????????(1)有且僅有一個特定的根結點;

????????(2)當 n>1 時,其余結點可分為 m 個互不相交的有限集合T1、T2......Tm,其中每一個集合又是一個樹,并且稱為子樹。

度、度數、深度

結點擁有子樹的個數稱為結點的度。度為 0 的結點稱為葉結點;度不為 0 稱為分支結點。

樹的度數:指在這顆樹中,最大的結點的度數,稱為樹的度數。

樹的深度(高度):指從根開始,根為第一層,根的孩子為第二層,即樹的層數,稱為樹的深度。

樹的存儲:順序結構、鏈表結構。

二叉樹(binary tree)

概念

二叉樹是 n 個結點的有限集合,集合要么為空樹,要么由一個根節點和兩棵互不相交的樹組成,這兩棵樹分別稱為根節點的左子樹和右子樹。

特點

(1)每個結點最多兩個子樹。

(2)左子樹和右子樹是有順序的,次序不能顛倒。

(3)如果某個結點只有一個子樹,也要區分左、右子樹。

特殊的二叉樹

(1)斜樹

斜樹分為兩種,一種是所有的結點都只有左子樹,稱為左斜樹;另一種是所有的結點都只有右子樹,稱為右斜樹。

(2)滿二叉樹

滿二叉樹是指所有的分支結點都存在左右子樹,并且葉子都在同一層上。

(3)完全二叉樹

完全二叉樹是指:對于一顆具有 n 個結點的二叉樹按照層序編號,如果編號 i( 1<= i <= n )的結點于同樣深度的滿二叉樹中編號為 i 的結點在二叉樹中的位置完全相同,則此樹稱為完全二叉樹。

特性

(1)在二叉樹的第 i 層上最多有 2^(i-1) 個結點,i >= 1。

(2)深度為 k 的二叉樹至多有 2^k-1 個結點,k >= 1。

(3)任意一個二叉樹T,如果其葉子結點的個數為 N,度數為 M,則 N=M+1。

(4)有 n 個結點的完全二叉樹深度為(logn / log2)+ 1。

層序

前序:根左右。先訪問根結點,再訪問左結點,最后訪問右結點。

中序:左根右。先從根結點開始(不是先訪問根結點),從左結點開始訪問,再訪問根結點,最后訪問右結點。

后序:左右根。先從根結點開始(不是先訪問根結點),從左結點開始訪問,再訪問右結點,最后訪問根結點。

二叉樹結構的程序編寫

1.創建二叉樹

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef char DATATYPE;
typedef struct BiTNode /* 結點結構 */
{DATATYPE data;                   /* 結點數據 */struct BiTNode *lchild, *rchild; /* 左右孩子指針 */
} BiTNode;char data[] = "Abd#g###ce#h##fi###";
int ind = 0;
void CreateTree(BiTNode **root)
{char c = data[ind++];if ('#' == c){*root = NULL;return;}else{*root = malloc(sizeof(BiTNode));if (NULL == *root){printf("malloc error\n");*root = NULL;return;}(*root)->data = c;CreateTree(&(*root)->lchild);CreateTree(&(*root)->rchild);}return;
}

2.三種不同的遍歷方式

根左右

void PreOrderTraverse(BiTNode *root)
{if (NULL == root){return;}else{printf("%c", root->data);PreOrderTraverse(root->lchild);PreOrderTraverse(root->rchild);}return;
}

左根右

void InOrderTraverse(BiTNode *root)
{if (NULL == root){return;}InOrderTraverse(root->lchild);printf("%c", root->data);InOrderTraverse(root->rchild);return;
}

左右根

void PostOrderTraverse(BiTNode *root)
{if (NULL == root){return;}PostOrderTraverse(root->lchild);PostOrderTraverse(root->rchild);printf("%c", root->data);return;
}

銷毀樹結構

void DestroyTree(BiTNode *root)
{if (NULL == root){return;}DestroyTree(root->lchild);DestroyTree(root->rchild);free(root);root = NULL;return;
}

各種排序的時間復雜度

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

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

相關文章

【MySQL】初識索引

目錄索引是什么優點和缺點B樹和B樹紅黑樹和哈希表存儲數據的局限B樹B樹MySQL中的頁頁是什么為什么要使用頁頁的結構三層樹高的B樹可以存放多少條記錄索引的分類主鍵索引普通索引唯?索引全?索引聚集索引和非聚集索引(重要)索引覆蓋創建索引自動創建手動創建創建復合索引查看索…

重生之我在暑假學習微服務第九天《后端拆分部分完結篇》

個人主頁&#xff1a;VON文章所屬專欄&#xff1a;微服務 微服務系列文章 重生之我在暑假學習微服務第一天《MybatisPlus-上篇》重生之我在暑假學習微服務第二天《MybatisPlus-下篇》重生之我在暑假學習微服務第三天《Docker-上篇》重生之我在暑假學習微服務第四天《Docker-下篇…

如何實現一個簡單的基于Spring Boot的用戶權限管理系統?

全文目錄&#xff1a;開篇語前言系統設計概述步驟一&#xff1a;創建Spring Boot項目步驟二&#xff1a;配置數據庫步驟三&#xff1a;定義實體類1. 用戶實體類 User2. 角色實體類 Role3. 權限實體類 Permission步驟四&#xff1a;創建JPA Repository步驟五&#xff1a;配置Spr…

機器學習及其KNN算法

一、機器學習概述機器學習&#xff08;Machine Learning, ML&#xff09;是人工智能的核心分支&#xff0c;旨在通過算法讓計算機從數據中自動學習規律并優化性能&#xff0c;而無需顯式編程。這一技術領域起源于20世紀50年代&#xff0c;隨著計算能力的提升和大數據時代的到來…

Kaggle 經典競賽泰坦尼克號:超級無敵爆炸詳細基礎逐行講解Pytorch實現代碼,看完保證你也會!!!

講解代碼分為3個步驟&#xff1a;有什么用&#xff0c;為什么需要他&#xff0c;如何使用保證大家耐心看完一定大有裨益&#xff01;如果有懂的可以跳過&#xff0c;不過建議可以看完&#xff0c;查漏補缺嘛。現在開始吧&#xff01;項目目標我們的目標是根據泰坦尼克號乘客的個…

雙目標定中旋轉矩陣參數應用及旋轉角度計算(聚焦坐標系平行)

一、引言 在雙目視覺系統開發中&#xff0c;若需實現右相機坐標系與左相機坐標系平行&#xff0c;核心在于通過雙目標定獲取的旋轉矩陣RRR&#xff0c;消除兩相機間的相對旋轉。本報告聚焦旋轉矩陣的物理意義與工程應用&#xff0c;詳細說明如何通過旋轉矩陣計算相對旋轉角度&a…

GraphRAG 入門教程:從原理到實戰

GraphRAG 入門教程&#xff1a;從原理到實戰 1. 什么是 GraphRAG&#xff1f; GraphRAG 是一種結構化的、分層的檢索增強生成&#xff08;Retrieval-Augmented Generation&#xff0c;簡稱 RAG&#xff09;方法 和傳統的 RAG 不同&#xff0c;GraphRAG 不僅僅依賴文本相似度搜索…

系統集成項目管理工程師【第十一章 規劃過程組】規劃成本管理、成本估算、制定預算和規劃質量管理篇

系統集成項目管理工程師【第十一章 規劃過程組】規劃成本管理、成本估算、制定預算和規劃質量管理篇 一、規劃成本管理&#xff1a;為成本管控定方向 規劃成本管理是項目成本管理的起點&#xff0c;其核心是明確“如何管”的規則&#xff0c;為整個項目的成本管理提供統一框架。…

Xiphos Q8 SDR DOCK子板 AD9361 寬帶收發器的 SDR 模塊。

Q8 混合處理器卡的子板&#xff0c;包含基于 ADI 公司流行的 AD9361 寬帶收發器的 SDR 模塊。與基于 AD9361 的 SDR 模塊接口PPS、CAN總線、串行、UART&#xff08;LVDS&#xff09;、USB接口電源接口&#xff08;5V、12V&#xff09; Q8 處理器卡的子板&#xff0c;集成了基于…

DPU(數據處理單元)架構中,SoC(系統級芯片)與FPGA(現場可編程門陣列)之間的數據交互

在DPU&#xff08;數據處理單元&#xff09;架構中&#xff0c;SoC&#xff08;系統級芯片&#xff09;與FPGA&#xff08;現場可編程門陣列&#xff09;之間的數據交互是實現高效異構計算的關鍵。根據通信目標和硬件特性&#xff0c;其交互數據類型可分為以下四類&#xff1a;…

圖論(鄰接表)DFS

競賽中心 - 藍橋云課 #include<bits/stdc.h> using namespace std; #define int long long const int A1e51; typedef pair<int,int>p; map<p,int>st; vector<p>edge[A]; int a[A]; int result0; bool dfs(int s,int u,int father,int v,int sum) {i…

深入理解VideoToolbox:iOS/macOS視頻硬編解碼實戰指南

引言&#xff1a;VideoToolbox框架概述 VideoToolbox是Apple提供的底層框架&#xff0c;首次在WWDC2014上推出&#xff0c;為iOS和macOS開發者提供直接訪問硬件編碼器和解碼器的能力。作為Core Media框架的重要組成部分&#xff0c;VideoToolbox專注于視頻壓縮、解壓縮以及Cor…

Python基礎語法練習

本文涵蓋了 Python 基礎編程中的多個重要概念&#xff0c;從簡單的輸出語句到運算符、字符串操作、變量賦值等都有涉及。這些例子非常適合初學者學習和理解 Python 的基本語法。1. Hello World# 輸出Hello Worldprint("Hello, World!")2. 變量賦值# 創建變量并賦值na…

關于“致命錯誤:‘https://github.com/....git/‘ 鑒權失敗”

問題分析 錯誤信息&#xff1a; remote: Invalid username or token. Password authentication is not supported for Git operations. 致命錯誤&#xff1a;https://github.com/yarajia/LittleTestToolsProject.git/ 鑒權失敗原因&#xff1a;GitHub從2021年8月13日起不再支持…

基于Flask + Vue3 的新聞數據分析平臺源代碼+數據庫+使用說明,爬取今日頭條新聞數據,采集與清洗、數據分析、建立數據模型、數據可視化

介紹 本項目為新聞數據分析平臺&#xff0c;目的是爬取新聞(目前僅含爬取今日頭條)數據&#xff0c;然后對數據進行展示、采集與清洗、數據分析、建立數據模型、數據可視化。本項目采用前后端分離模式&#xff0c;前端使用 Vue3 ArcoDesign 搭建&#xff0c;后端使用 Python …

LabVIEW數字抽取濾波

?基于 LabVIEW 平臺設計數字抽取濾波器&#xff0c;用于動態測試領域&#xff0c;解決高采樣率數據的大動態范圍需求與頻帶劃分問題。方案替換硬件為可靠性優異的品牌&#xff0c;通過虛擬儀器架構實現信號處理功能&#xff0c;為動態信號分析提供高效、可復用的設計參考。應用…

云原生時代的 Linux:容器、虛擬化與分布式的基石

&#x1f4dd;個人主頁&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; 在云計算與容器化快速發展的今天&#xff0c;Linux 已經不再只是服務器上的操作系統&#xff0c;而是整個云原生生態的底層基石。無論是運…

多場景兩階段分布式魯棒優化模型、數據驅動的綜合能源系統

基于數據驅動的綜合能源系統多場景兩階段分布式魯棒優化模型 魯棒優化是應對數據不確定性的一種優化方法&#xff0c;但單階段魯棒優化過于保守。為了解決這一問題&#xff0c;引入了兩階段魯棒優化(Two-stage Robust Optimization)以及更一般的多階段魯棒優化&#xff0c;其核…

Python實現點云PCA配準——粗配準

本節我們來介紹PCA&#xff08;主成分分析&#xff09;算法進行點云配準&#xff0c;這是一種經典的統計降維與特征提取工具&#xff0c;在三維點云處理中常被用來完成“粗配準”。其核心思想是&#xff1a;先把兩個待對齊的點云各自進行主成分分解&#xff0c;獲得各自的“主軸…

零基礎深度學習規劃路線:從數學公式到AI大模型的系統進階指南

引言在人工智能革命席卷全球的2025年&#xff0c;深度學習已成為改變行業格局的核心技術。本規劃路線整合最新教育資源與實踐方法&#xff0c;為完全零基礎的學習者構建一條從數學基礎到AI大模型的系統學習路徑。通過清華大佬的實戰課程、吳恩達的經典理論、Kaggle競賽的實戰錘…