【數據結構入門】樹

目錄

1.樹的概念

父子結點

根節點|葉節點

結點的度

葉子結點或終端結點

兄弟結點

樹的度

結點的層次

樹的高度或深度

結點的祖先

堂兄弟結點

子孫

森林

2. 樹的結構定義

2.1 左孩子右兄弟結構

2.2 數組表示法

3.樹&非樹


1.樹的概念

? ? ? ? 樹是一種非線性的數據結構,它是由N(N>=0)個有限節點組成的一個具有層次關系的集合。把它叫做樹是因為它看起來像一棵倒掛的樹。也就是說它是根朝上,葉朝下的。

我們發現樹是有一個一個節點構成的,如果一個節點都沒有,我們稱作“空樹”。

父子結點

????????通常由一個結點延伸出來的直接結點稱作該結點的子結點;例如下圖中:1號結點是2號結點的父結點,2號結點是1號結點的子結點。

根節點|葉節點

? ? ? ? 沒有父結點的結點稱為根結點;

? ? ? ? 沒有子結點的結點稱為葉結點。

結點的度

一個結點含有的子樹的個數稱為該結點的度,上圖A的度為6;

葉子結點或終端結點

度為0的節點稱為葉結點,上圖BCHIPQKLMN,都是葉結點。

兄弟結點

擁有相同的父結點的結點稱為兄弟結點,例如KLM是兄弟結點。

樹的度

最大結點的度稱為樹的度,上圖中樹的度是6

結點的層次

從根開始,根為第一層,根的子結點稱為第2層,以此類推。

樹的高度或深度

樹中結點層次最大的。如上圖樹的高度為4;

結點的祖先

從根到該結點經過的所有結點,如上圖A是所有結點的祖先,P的祖先是AEJ;

堂兄弟結點

雙親在同一層的結點互為堂兄弟結點,例如HI是堂兄弟結點。

子孫

以某節點為根的子樹都叫做該結點的子孫。

森林

由M(M>0)棵互不相交的樹的集合稱為森林。

2. 樹的結構定義

? ? ? ? 當已知數的度是多少的情況下可以定義樹的結構:

#define _CRT_SECURE_NO_WARNINGS
#define N 3 // 假設度為3
typedef struct TreeNode 
{int val;struct TreeNode* child1[N];
}TreeNode;

????????在windows文件資源管理器中,其實就是一棵樹,盤符是根結點,但是這棵樹沒有規定究竟有多少個子節點,也就是說這里沒有提前定義這棵樹的度。上面那種定義會存在一定程度上的內存浪費。

? ? ? ? 我們可以使用順序表來存,順序表的每一個元素都是一個結點的指針,這種定義的方式顯然也不夠好,在底層也會有一定程度的空間浪費。

typedef struct TreeNode 
{int val;TreeNodeSeqList childs;
}TreeNo

2.1 左孩子右兄弟結構

? ? ? ? 在樹中有一種非常清晰明了的結構,結構體中存有兩個指針,一個指針指向左邊第一個孩子,第二個指針指向它的兄弟(親兄弟)。

typedef struct TreeNode 
{int val;TreeNode LeftChild;TreeNode RightBrother;
}TreeNode;

如圖:

我們使用左孩子右兄弟的表示方法表示上面的樹:

通過訪問根結點的左邊第一個孩子,再通過訪問它的右兄弟就能將A節點的所有孩子全部訪問。

2.2 數組表示法

定義兩個數組,第一個數組是存放所有的結點;

第二個數組根據每一個結點存放對應的父結點的下標。

例如A沒有父結點,存-1;

B、C的父結點是A,存A的下標0......

3.樹&非樹

①子樹是不相交的。

②每一個結點有且只有一個父結點。

③N個節點有N-1條邊。

只需要看樹是否構成回路

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

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

相關文章

手把手教你用 Flink + CDC 實現 MySQL 數據實時導入 StarRocks(干貨)

手把手教你用 Flink CDC 實現 MySQL 數據實時導入 StarRocks(干貨) 如何利用 Apache Flink 結合 CDC(Change Data Capture,變更數據捕獲)技術,將 MySQL 的數據實時導入 StarRocks,打造高效的實…

Rust:anyhow 高效錯誤處理庫核心用法詳解

以下是 anyhow 庫在 Rust 中的核心用法詳解(結合最佳實踐和示例): 🔰 一、anyhow 的核心價值 用于簡化錯誤處理,尤其適合: 需要快速原型開發的應用需要豐富錯誤上下文(Context)的場…

阿里云服務linux安裝單機版

一、單機安裝Redis 阿里教程 下載地址:redis下載地址 1、首先需要安裝Redis所需要的依賴: yum install -y gcc tcl 2、下載Redis 注:也可以自己下好然后上傳到云服務 wget https://gitcode.net/weixin_44624117/software/-/raw/master/software/Li…

python之uv使用

文章目錄安裝與更新standalonepip 安裝創建以及初始化項目依賴管理uv run直接在命令行運行python代碼片段直接運行項目中可執行腳本文件運行python包中快捷指令uv項目本地運行調試細節vscode 中運行調試uv項目命令行運行深入理解 uv lock, uv sync, uv lockuv lock 行為解析:uv…

【CV 目標檢測】①——目標檢測概述

一、目標檢測概述 1.目標檢測 目標檢測(Object Detection)的任務是找出圖像中所有感興趣的目標,并確定它們的類別(分類任務)和位置(回歸任務) 目標檢測中能檢測出來的物體取決于當前任務&…

C#圖形庫SciChart與ScottPlot及LiveCharts2對比

一.概述 1.SciChart SciChart 是一個專為企業級應用設計的高性能數據可視化庫,提供跨平臺的圖表解決方案,支持 .NET、JavaScript、iOS 和 Android 等多個平臺。它以卓越的渲染性能、豐富的專業圖表類型和強大的交互功能著稱, 廣泛應用于金…

Win10電腦密碼忘記如何進入操作系統

http://xq128.com/zj.htmlhttps://share.feijipan.com/s/LbFdbUKl下載后,準備一個空的U盤,大于4G。將U盤制作為PE盤。之后將制作好的PE盤插入到電腦中,啟動待去除密碼的電腦臺式機,啟動后一直按住F12,進入BIOS。選擇下…

[免費]基于Python的網易云音樂熱門歌單可視化大屏項目(flask+pandas+echarts+request庫)【論文+源碼+SQL腳本】

大家好,我是python222_小鋒老師,看到一個不錯的基于Python的網易云音樂熱門歌單可視化大屏項目(flaskpandasechartsrequest庫),分享下哈。 項目視頻演示 【免費】基于Python的網易云音樂熱門歌單可視化大屏項目(flaskpandasecharts爬蟲) Py…

AR 智能眼鏡:從入門到未來

從零看懂 AR 智能眼鏡:未來 10 年技術演進與新手入門指南 在這個數字技術飛速迭代的時代,AR 智能眼鏡正從科幻電影走進現實。從 2025 年重量不足 35 克的消費級產品,到 2030 年成為 “第二大腦” 的生活剛需,再到 2040 年進化為神經接口終端,AR 智能眼鏡的發展將重塑人類…

初識Vue2及MVVM理解

1、什么是Vue Vue是一款用于構建用戶界面的JavaScript框架。它基于標準HTML、CSS和JavaScript構建,并提供了一套聲明式的、組件化的編程模型,可以高效地開發用戶界面。 Vue.js是一套構建用戶界面的漸進式框架,采用自底向上增量開發的設計&…

Rust:專業級錯誤處理工具 thiserror 詳解

Rust:專業級錯誤處理工具 thiserror 詳解 thiserror 是 Rust 中用于高效定義自定義錯誤類型的庫,特別適合庫開發。相比 anyhow 的應用級錯誤處理,thiserror 提供更精確的錯誤控制,讓庫用戶能模式匹配具體錯誤。 📦 基…

Python網絡爬蟲(一) - 爬取靜態網頁

文章目錄一、靜態網頁概述1. 靜態網頁介紹2. 靜態網頁爬取技術Requests介紹二、安裝 Requests 庫三、發送請求并獲取響應1. 發送 GET 請求1.1 get() 方法介紹1.2 get() 方法簽名介紹1.3 get() 方法參數介紹1.4 示例:發送get請求2. 發送 POST 請求2.1 post() 方法介紹…

.NET/C# webapi框架下給swagger的api文檔中顯示注釋(可下載源碼)

bg&#xff1a;.NET/C#真的是越來越涼了。用的是.net9&#xff0c;創建完自帶一個天氣預報api拿來測試就行 1、在Controllers中弄多幾個&#xff0c;并寫上注釋 /// <summary> /// Post注釋 /// </summary> /// <returns></returns> [HttpPost] publ…

2508C++,檢測S模式

原文 可用Windows.System.Profile.WindowsIntegrityPolicy類檢測S模式. //C# using Windows.System.Profile; if (WindowsIntegrityPolicy.IsEnabled) {//系統在S模式if (WindowsIntegrityPolicy.CanDisable) {//系統在S模式,但可退出S模式suggestCompanion true;} else {//系…

Coding Exercising Day 9 of “Code Ideas Record“:StackQueue part 01

文章目錄1. Theoretical basisThe C standard library has multiple versions. To understand the implementation principles of stack and queue, we must know which STL version we are using.The stack and queue discussed next are data structures in *SGI STL*. Only …

Mysql數據倉庫備份腳本

Mysql數據倉庫備份腳本 #!/bin/bash# MySQL數據庫完整備份腳本 # 功能: 查詢所有數據庫 -> 分別導出 -> 壓縮打包# 配置區域 # MySQL連接信息 MYSQL_USER"root" MYSQL_PASSWORD"root" MYSQL_HOST"localhost" MYSQL_PORT"3306"…

基于嵌入式Linux RK3568 qt 車機系統開發

嵌入式系統、Qt/QML 與車機系統的發展趨勢分析 1. RK3568 開發板與 OpenGL ES 3 支持&#xff0c;為圖形應用打下堅實基礎 RK3568 是瑞芯微&#xff08;Rockchip&#xff09;推出的一款高性能、低功耗的64位處理器&#xff0c;廣泛用于工業控制、智能終端、嵌入式車載系統等領…

OceanBase架構設計

本文主要參考《大規模分布式存儲系統》 基本結構客戶端&#xff1a;發起請求。 RootServer&#xff1a;管理集群中的所有服務器&#xff0c;子表數據分布及副本管理&#xff0c;一般為一主一備&#xff0c;數據強同步。 UpdateServer&#xff1a;存儲增量變更數據&#xff0c;一…

[Element-plus]動態設置組件的語言

nuxt element-plus國際化vue element-plus國際化<template><div class"container"> <!-- <LangSwitcher />--><button click"toggle(zh-cn)">中文</button><button click"toggle(en)">English<…

【VS Code - Qt】如何基于Docker Linux配置Windows10下的VS Code,開發調試ARM 版的Qt應用程序?

如何在Windows 10上配置VS Code以開發和調試ARM版Qt應用程序。這需要設置一個基于Docker的Linux環境。首先&#xff0c;讓我們了解一下你的具體需求和環境&#xff1a;你有一個Qt項目&#xff08;看起來是醫學設備相關的設置程序&#xff09;目標平臺是ARM架構你希望在Windows …