【數據結構】二叉樹概念 | 滿二叉樹 | 完全二叉樹

二叉樹的概念

二叉樹在實踐中用的很多。

一棵二叉樹是結點的一個有限集合,該集合:

  • 或者為空
  • 一個根結點加上兩棵別稱為左子樹右子樹的二叉樹組成。
  • 二叉樹最多兩個孩子

這里注意:二叉樹并不是度為2的樹

二叉樹的度最大值是2,并不是說它的度一定為2。所以一下這四種情況也均是二叉樹:

  • 空樹
  • 只有根節點
  • 只有左子樹
  • 只有右子樹
  • 左右子樹均存在

二叉樹不存在度大于2的節點;

二叉樹的子樹有左右之分次序是不能顛倒的,因此二叉樹是有序樹

二叉樹通俗也可以理解為對樹進行了“計劃生育”。?“計劃生育”也就是生兩個小孩,但是是每一家來說都是生兩個嗎?

那么度為2的一定是二叉樹嗎?

  • 度為2一定是二叉樹。度為2的話,那么所有節點的最大的度就是2,而二叉樹的概念是不存在度大于2的節點。
  • 二叉樹是一個特殊的樹,它的度最大為2,但是并沒有說一定為2。

特殊的二叉樹

滿二叉樹

一個二叉樹,如果每一個層的結點數都達到最大值,那么這個二叉樹就是滿二叉樹。也就是說,如果一個二叉樹的成熟為K,那么結點總數就是2^{K}-1,那么它就是滿二叉樹。

根據上圖:

  • 假設高度為h,那么就會有2^{h}-1的節點;
  • 那么假設樹有N個節點的話,那就是?2^{h}-1=N;那么 高度就為 h=\log _{2}(N+1)

完全二叉樹

完全二叉樹,前h-1層都是滿的,最后一層不一定滿,但是從左到右必須連續

完全二叉樹是效率很高的數據結構,完全二叉樹是由滿二叉樹而引出來的。對于深入為K的,有n個節點的二叉樹,當且僅當其每一個節點都與深度為K的滿二叉樹中編號從1至n的結點一一對應時稱之為完全二叉樹。要注意的是滿二叉樹是一種特殊的完全二叉樹。

這里注意二叉樹順序是固定的,必須是連續的。

假設完全二叉樹的高度為h,那么它的結點數量是多少呢?

完全二叉樹的最后一層的范圍:?\left [ 2^{h-1},2^{h}-1 \right ]

思路:

  • 這里我們想在滿二叉樹中,結點數為2^{h}-1
  • 那么滿二叉樹中的上一層就是有2^{h-1}-1
  • 因為完全二叉樹就是滿二叉樹的基礎上,最后一層不滿,也就是最后一層的結點數最多有2^{h-1},最少有1個;
  • 所以根據等比公式可以求得出完全二叉樹最后一層的范圍為:?\left [ 2^{h-1} , 2^{h}-1 \right ]

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

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

相關文章

Go lumberjack 日志輪換和管理

在開發應用程序時,記錄日志是一項關鍵的任務,以便在應用程序運行時追蹤問題、監視性能和保留審計記錄。Go 語言提供了靈活且強大的日志記錄功能,可以通過多種方式配置和使用。其中一個常用的日志記錄庫是 github.com/natefinch/lumberjack&am…

python selenium 模擬瀏覽器自動操作搶購腳本

每逢秒殺,都在遺憾網速和手速慢沒能搶購到商品吧。 手寫一個腳本,讓程序幫你搶,搶到的概率會大大提升。 廢話不多說,直接上代碼。 本實例以華為官網搶購手機為例 """ 模擬瀏覽器操作華為官網(1) 【只需要安裝一…

【JAVA】我們該如何規避代碼中可能出現的錯誤?(二)

個人主頁:【😊個人主頁】 系列專欄:【??初識JAVA】 文章目錄 前言異常方法(Throwable類)Throwable類的方法 捕獲異常多重捕獲塊 前言 異常是程序中的一些錯誤,但并不是所有的錯誤都是異常,并…

git-3

1.如何讓工作區的文件恢復為和暫存區一樣? 工作區所作的變更還不及暫存區的變更好,想從暫存區拷貝到工作區,變更工作區(恢復成和暫存區一樣的狀態),想到用git checkout -- 文件名 2.怎樣取消暫存區部分文件的更改? 如…

無損壓縮技巧:減小PDF文件尺寸的有效方法

我們在制作pdf文檔的時候,會加入許多內容,文字、圖片等等,素材添加的過多之后就會導致pdf文檔特別大,在上傳或者儲存時,就會特別不方便,所以今天就告訴大家一個pdf壓縮的方法,使用pdf在線壓縮工…

4-Docker命令之docker info

后續為大家逐個講解一下docker常用命令及其相關用法。docker常用命令查看如下: [root@centos79 ~]# docker --helpUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersCommon Commands:run Create and run a new container from an imageexec…

洛谷 P1883 函數

P1883 函數 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) Error Curves - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 這兩題是一模一樣的,過一題水兩題。 分析 主要難點在于證明F(x)是一個單峰函數可以被三分,但是我隨便畫了幾個f(x)之后發現好像…

MySQL的Redo Log跟Binlog

文章目錄 概要Redo Log日志Redo Log的作用Redo Log的寫入機制 Binlog日志Binlog的作用Binlog寫入機制 兩段提交 概要 Redo Log和Binlog是MySQL日志系統中非常重要的兩種機制,也有很多相似之處,本文主要介紹兩者細節和區別。 Redo Log日志 Redo Log的作…

Docker+ Jenkins+Maven+git自動化部署

環境:Centos7 JDK1.8 Maven3.3.9 Git 2.40 Docker 20.10.17 準備工作: 安裝Docker Centos7默認的yum安裝的docker是1.13,版本太低,很多鏡像都要Docker版本要求,升級Docker版本。 卸載已安裝Docker: yum …

你知道如何實現游戲中的透視效果嗎?

引言 游戲中的透視效果可以合理運用CtrlCV實現。 不知道大家有沒有這樣一段經歷:在做Cocos項目時需要一些特定的Shader去做一些特定的效果,例如透視、高光、濾鏡等等,想自己寫吧,不怎么會啊,網上又找不到&#xff0c…

27 - 如何使用設計模式優化并發編程?

在我們使用多線程編程時,很多時候需要根據業務場景設計一套業務功能。其實,在多線程編程中,本身就存在很多成熟的功能設計模式,學好它們,用好它們,那就是如虎添翼了。今天我就帶你了解幾種并發編程中常用的…

redis-cluster集群(目的:高可用)

1、特點 集群由多個node節點組成,redis數據分布在這些節點中,在集群中分為主節點和從節點,一個主對應一個從,所有組的主從形成一個集群,每組的數據是獨立的,并且集群自帶哨兵模式 2、工作原理 集群模式中…

【ZedBoard學習實例1】 VGA顯示彩條

ZedBoard學習實例1 VGA顯示彩條 ZedBoard學習實例1 VGA顯示彩條參考文章改進 ZedBoard學習實例1 VGA顯示彩條 參考文章 彩條控制verilog代碼 主體參考了該文章的代碼,文中還介紹了相關的電路圖,還有ZedBoard的手冊內容。19201080分辨率顯示器的參數 針…

重生之我是一名程序員 37 ——C語言中的棧溢出問題

哈嘍啊大家晚上好! 今天呢給大家帶來一個燒腦的知識——C語言中的棧溢出問題。那什么是棧溢出呢?棧溢出指的是當程序在執行函數調用時,為了保護函數的局部變量和返回地址,將這些數據存儲在棧中。如果函數在函數調用時使用了過多的…

Sentinel核心類解讀:Entry

默認情況下,Sentinel會將controller中的方法作為被保護資源,Sentinel中的資源用Entry來表示。 Sentinel中Entry可以理解為每次進入資源的一個憑證,如果調用SphO.entry()或者SphU.entry()能獲取Entry對象,代表獲取了憑證&#xff…

安卓手機便簽APP用哪個,手機上好用的便簽APP是什么

在日常生活及工作方面,總是有許多做不完的事情需要大家來處理,當多項任務堆疊交叉在一起時,很容易漏掉一些項目,這時候大家會借助經常攜帶的手機來記錄容易忘記的事情,如手機上的鬧鐘、定時提醒軟件都可以用來記錄待辦…

2023亞太杯數學建模A題思路分析 - 采果機器人的圖像識別技術

1 賽題 問題A 采果機器人的圖像識別技術 中國是世界上最大的蘋果生產國,年產量約為3500萬噸。與此同時,中國也是世 界上最大的蘋果出口國,全球每兩個蘋果中就有一個,全球超過六分之一的蘋果出口 自中國。中國提出了一帶一路倡議…

JDK11新特性

目錄 一、JShell 二、Dynamic Class-File Constants類文件新添的一種結構 三、局部變量類型推斷(var ”關鍵字”) 四、新加的一些實用API 1. 新的本機不可修改集合API 2. Stream 加強 3. String 加強 4. Optional 加強 5. 改進的文件API 五、移…

canvas

Canvas 是 Android 中用于繪制圖形的重要類,它提供了許多用于繪制的常用方法。以下是一些常用的 Canvas 方法: 繪制顏色和背景: drawColor(int color): 用指定顏色填充整個畫布。drawRGB(int r, int g, int b): 用 RGB 值指定顏色填充整個畫布…

進程池,線程池與跨進程數據共享爬取某岸網圖片

看教程的時候看到一個,生產者跟消費者的概念比較有意思,但是給的代碼有問題無法正常運行,于是我就搗鼓了一下。 基本概念就是: 生產者: 一個進程獲取網頁沒頁的圖片連接(主進程…