二叉树相关知识及求深度的代码实现
生活随笔
收集整理的這篇文章主要介紹了
二叉树相关知识及求深度的代码实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 樹
- 二叉樹
- 滿二叉樹和完全二叉樹
- 二叉樹的性質(zhì)
- 代碼實現(xiàn)求二叉樹的深度
樹
樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n個有限結(jié)點組成一個具有層次關(guān)系的集合。
樹的相關(guān)名詞:
- 根節(jié)點:沒有前驅(qū)結(jié)點的結(jié)點。
- 父節(jié)點,子節(jié)點:有 節(jié)點C 為 節(jié)點E 的前驅(qū)節(jié)點(那么 E 就是 C 的后繼節(jié)點),稱 C 為 E 的父節(jié)點, E 為 C 的子節(jié)點。
- 兄弟節(jié)點:具有相同的父節(jié)點的結(jié)點互稱為兄弟節(jié)點,如B,C是兄弟節(jié)點
- 深度(高度):從根節(jié)點到葉節(jié)點依次經(jīng)過的節(jié)點(含根、葉節(jié)點)形成樹的一條路徑,最長路徑的長度為樹的深度。
- 度:該節(jié)點的子節(jié)點個數(shù)。樹的度則是其中節(jié)點度的最大值。
- 邊:父子節(jié)點間的連線,N 個節(jié)點有 N-1 條邊。
- 葉子節(jié)點:度為零的結(jié)點為葉子節(jié)點,如下圖中所有#
二叉樹
二叉樹:每個節(jié)點最多含有兩個子樹的樹稱為二叉樹。特點如下:
- 每個節(jié)點最多有兩棵子樹,即二叉樹不存在度大于2的節(jié)點
- 二叉樹的子樹有左右之分,其子樹的次序不能顛倒
滿二叉樹和完全二叉樹
滿二叉樹:
一個二叉樹,如果每一層的節(jié)點數(shù)都達到最大值,則這個二叉樹就是滿二叉樹。也就是說,如果一個二叉樹的層數(shù)為K,且節(jié)點總數(shù)為(2^k)-1,則就是滿二叉樹
完全二叉樹:
滿二叉樹是一種特殊的完全二叉樹,對于深度為k的,有n個節(jié)點的二叉樹,當且僅當每一個節(jié)點都與深度為K的滿二叉樹中編號1~n的結(jié)點相對應(yīng)時稱為完全二叉樹
有一個很好的區(qū)分它們的方法:滿二叉樹是除葉子節(jié)點外所有節(jié)點都存在左右子樹的一棵樹,而完全二叉樹則是所有節(jié)點都是連續(xù)的,不存在有右子樹而沒有左子樹的情況
二叉樹的性質(zhì)
- 一棵非空二叉樹上的 第n層 最多有 2n-1 個節(jié)點(層數(shù)從1開始)
- 深度為n 的二叉樹的最大節(jié)點數(shù)為 2n - 1 個
- 如果葉子節(jié)點的個數(shù)為 n0 ,度為2 的結(jié)點的個數(shù)為 n2 ,則有 n0 = n2 + 1
- 具有 n 個節(jié)點的完全二叉樹的深度為 log2(n) + 1
- 如果 某結(jié)點 的編號為 i(從0開始),那么他的 左孩子 編號為 2i +1 , 右孩子 編號為 2i +2 ,他的 父節(jié)點 為 (i - 1) / 2 。
代碼實現(xiàn)求二叉樹的深度
求樹的深度需要遍歷樹的所有節(jié)點,樹的遍歷方式總體分為兩類:
深度優(yōu)先搜索(DFS)、廣度優(yōu)先搜索(BFS);
- 常見的 DFS : 先序遍歷、中序遍歷、后序遍歷;
- 常見的 BFS : 層序遍歷(即按層遍歷)。
本文將介紹基于 后序遍歷(DFS) 和 層序遍歷(BFS) 的兩種解法。
- DFS深度優(yōu)先搜索:
- BFS廣度優(yōu)先搜索:
總結(jié)
以上是生活随笔為你收集整理的二叉树相关知识及求深度的代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019POS机跳码排名:这类POS机会
- 下一篇: leetcode129. 求根到叶子节点