日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树的基础知识

發布時間:2024/4/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树的基础知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、你應該具備的基礎知識
  • 二、二叉樹的種類有哪些?
    • 1、滿二叉樹
    • 2、完全二叉樹
    • 3、二叉搜索樹(二叉排序樹)
    • 4、平衡二叉搜索樹
    • 小結
  • 三、二叉樹的存儲方式
    • 1、鏈式存儲(最重要)
    • 2、順序存儲(了解)
  • 四、二叉樹的遍歷方式
    • 小結
  • 五、二叉樹的定義(要能手撕)
  • 六、總結


前言

提示:二叉樹是一種重要的數據結構,也是面試和筆試的重頭,接下來我們要系統性的總結二叉樹的知識點。


一、你應該具備的基礎知識

1、結點的度:樹中結點擁有的子樹個數。度為0的結點為葉結點或終端結點。

2、樹的度:樹中所有結點的度的最大值。(不是和)

3、樹中結點總數:所有結點的度數和加1

4、度為m的樹與m叉樹的區別

5、結點的層次(level )

6、邊: 一棵n個結點樹有n-1條邊

7、路徑:從結點n1到結點ni的結點序列,路徑的長度為該路徑上邊的條數。從根到每個結點恰好存在一條路徑。

8、結點深度:從根到當前結點的路徑的長度。根結點的深度是0 ,右圖中B和C的深度是1 , E的深度是2。

9、結點高度:從當前結點到葉結點(終端結點)最長路徑的長度。樹的葉結點的高度是0。右圖中B的高度是2 , C的高度是1。一棵樹的深度等于最深的結點的深度,該深度總是等于這棵樹的高度。

10、m叉樹中第i層上最多有m^(i-1)個結點

11、高度為h的m叉樹最多有( m^(h-1) ) / (m-1) 個結點

嚴:
1 )結點的層次從1開始;
2)沒有對結點深度和高度作出解釋;
3)樹中結點最大的層次稱為樹的深度或高度。

二、二叉樹的種類有哪些?

其中我們接觸最多也最重要的是:滿二叉樹和完全二叉樹。

1、滿二叉樹

只有度為0的結點和度為2的結點,并且度為0的結點在同一層。
高度為h的二叉樹有 2^h -1 個結點。

2、完全二叉樹

除最底層可能沒填滿外,其余每層節點數都達到了最大值,并且最下面一層的結點都集中在該層最左邊的若干位置。若最底層為第h層,則該層包含1~2^(h-1)個結點。

3、二叉搜索樹(二叉排序樹)

若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;
若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;
它的左、右子樹也分別為二叉排序樹;

4、平衡二叉搜索樹

著名的AVL樹,更嚴格的二叉搜索樹,它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。

C++中set/multiset、map/multimap的底層實現都是紅黑樹(一種平衡二叉搜索樹),所以map、set的增刪操作時間時間復雜度是logn。

小結

1、平衡二叉搜索樹就是二叉搜索樹和平衡二叉樹的結合
2、完全二叉樹一定是平衡二叉樹。他們的區別在于底層節點的位置,完全二叉樹底層必須是從左到右連續的,且次底層是滿的。
3、堆就是一棵完全二叉樹,同時保證父子節點的順序關系(父節點大于左右孩子)。堆的順序是父節點大于左右孩子,二叉搜索樹是父節點大于左孩子,小于右孩子,所以堆不是平衡二叉搜索樹。

三、二叉樹的存儲方式

1、鏈式存儲(最重要)

2、順序存儲(了解)


如果父節點的數組下標是i,那么它的左孩子就是2i + 1,右孩子就是 2i + 2。

四、二叉樹的遍歷方式

1、二叉樹主要有兩種遍歷方式:
深度優先遍歷:先往深走,遇到葉子節點再往回走。
廣度優先遍歷:一層一層的去遍歷。

從深度優先遍歷和廣度優先遍歷進一步拓展,才有如下遍歷方式:
深度優先遍歷
前序遍歷(遞歸法,迭代法)
中序遍歷(遞歸法,迭代法)
后序遍歷(遞歸法,迭代法)
廣度優先遍歷
層次遍歷(迭代法)

中間節點的順序就是所謂的遍歷方式

小結

我們做二叉樹相關題目,經常會使用遞歸的方式來實現深度優先遍歷,也就是實現前中后序遍歷。

棧其實就是遞歸的一種是實現結構,也就說前中后序遍歷的邏輯其實都是可以借助棧使用非遞歸的方式來實現的。

而廣度優先遍歷的實現一般使用隊列來實現,這也是隊列先進先出的特點所決定的,因為需要先進先出的結構,才能一層一層的來遍歷二叉樹。

五、二叉樹的定義(要能手撕)

代碼如下(示例):

struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} };

六、總結

本篇介紹了二叉樹的種類、存儲方式、遍歷方式以及定義,比較全面的介紹了二叉樹各個方面的重點,掃了一遍基礎。接下來將要重點學習二叉樹的遍歷方法。
注:本篇文章參考代碼隨想錄公眾號整理所得。

總結

以上是生活随笔為你收集整理的二叉树的基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。