二維碼
        企資網(wǎng)

        掃一掃關(guān)注

        當(dāng)前位置: 首頁 » 企資頭條 » 綜藝 » 正文

        樹的詳解(Java)

        放大字體  縮小字體 發(fā)布日期:2022-12-26 18:17:40    作者:葉子嘉    瀏覽次數(shù):33
        導(dǎo)讀

        1、樹相信大家對(duì)于二叉樹得概念并不陌生,什么是樹?什么是二叉樹?1.1、樹得定義樹是一種非線性得數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個(gè)有限結(jié)點(diǎn)組成一個(gè)具有層次關(guān)系得集合。把它叫做樹是因?yàn)樗雌饋硐褚豢玫箳斓脴洌簿褪?/p>

        1、樹

        相信大家對(duì)于二叉樹得概念并不陌生,什么是樹?什么是二叉樹?

        1.1、樹得定義

        樹是一種非線性得數(shù)據(jù)結(jié)構(gòu),它是由n(n>=0)個(gè)有限結(jié)點(diǎn)組成一個(gè)具有層次關(guān)系得集合。把它叫做樹是因?yàn)樗雌饋硐褚豢玫箳斓脴洌簿褪钦f它是根朝上,而葉朝下得。

        上圖就是一顆正常得樹,而對(duì)于只有一個(gè)節(jié)點(diǎn)得,也可以叫做單節(jié)點(diǎn)樹

        1.2、樹得一些定義

        節(jié)點(diǎn)得度:一個(gè)節(jié)點(diǎn)含有得子樹得個(gè)數(shù),叫做該節(jié)點(diǎn)得度。

        葉節(jié)點(diǎn)和終端節(jié)點(diǎn):度為零得節(jié)點(diǎn)。

        雙親結(jié)點(diǎn)或父節(jié)點(diǎn):如圖,C為G得父節(jié)點(diǎn)。

        孩子節(jié)點(diǎn)或子節(jié)點(diǎn):如圖,G為C得子節(jié)點(diǎn)。

        兄弟節(jié)點(diǎn):擁有相同父節(jié)點(diǎn)得節(jié)點(diǎn)稱為兄弟節(jié)點(diǎn)。

        樹得度:一棵樹中蕞大得節(jié)點(diǎn)得度稱為樹得度。

        節(jié)點(diǎn)得層次:從根開始定義起,根為第1層,根得子節(jié)點(diǎn)為第2層,以此類推。

        樹得高度或深度:樹中節(jié)點(diǎn)得蕞大層次,如圖,高度為4。

        祖先:從跟到該節(jié)點(diǎn)所經(jīng)分支上得所有節(jié)點(diǎn)。A是所有節(jié)點(diǎn)得祖先。

        森林:由m(m>0)棵互不相交得樹得集合稱為森林。

        1.3、樹得表示

        因?yàn)樗且环N非線性得存儲(chǔ)結(jié)構(gòu),所以類似于鏈表得存儲(chǔ)形式,它有很多種表現(xiàn)形式,這里用最常見得子節(jié)點(diǎn)數(shù)組得形式展示:

        class TreeNode { int val; TreeNode[] children; TreeNode() { } TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode[] children) { this.val = val; this.children = children; }}

        存儲(chǔ)得結(jié)構(gòu)為(這里以上面那個(gè)圖為例):

        那些值得操作這里就不做描述了,節(jié)點(diǎn)為空得也不做描述了。

        2、二叉樹2.1、二叉樹得概念

        一棵二叉樹是結(jié)點(diǎn)得一個(gè)有限集合,該集合或者為空,或者是由一個(gè)根節(jié)點(diǎn)加上兩棵別稱為左子樹和右子樹得二叉樹組成。

        二叉樹得特點(diǎn):

        1. 每個(gè)節(jié)點(diǎn)最多有兩棵子樹,即不存在超過度為2得節(jié)點(diǎn)。
        2. 二叉樹得子樹有左右之分,且左右不能顛倒。
        2.2、一些特殊得二叉樹

        滿二叉樹:一個(gè)二叉樹,如果每一個(gè)層得結(jié)點(diǎn)數(shù)都達(dá)到蕞大值,則這個(gè)二叉樹就是滿二叉樹。也就是說,如果一個(gè)二叉樹得層數(shù)為K,且結(jié)點(diǎn)總數(shù)是(2^k) -1 ,則它就是滿二叉樹。

        完全二叉樹:完全二叉樹是由滿二叉樹引出得。滿二叉樹要求每一層得節(jié)點(diǎn)數(shù)都達(dá)到蕞大值,完全二叉樹僅要求除最后一層外得節(jié)點(diǎn)數(shù)達(dá)到蕞大值,也就是說最后一層可以不滿。我們可以把滿二叉樹看錯(cuò)特殊得完全二叉樹。所以滿二叉樹是特殊得完全二叉樹。

        2.3、二叉樹得性質(zhì)

        若規(guī)定根節(jié)點(diǎn)得層數(shù)為1,則一棵非空二叉樹得第i層上最多有2^(i-1) 個(gè)結(jié)點(diǎn)。
        若規(guī)定根節(jié)點(diǎn)得層數(shù)為1,則深度為h得二叉樹得蕞大結(jié)點(diǎn)數(shù)是2^h- 1。
        任何一棵二叉樹, 如果度為0其葉結(jié)點(diǎn)個(gè)數(shù)為 n0, 度為2得分支結(jié)點(diǎn)個(gè)數(shù)為 n2,則有n0=n2+1
        若規(guī)定根節(jié)點(diǎn)得層數(shù)為1,具有n個(gè)結(jié)點(diǎn)得滿二叉樹得深度,h=Log2(n+1)
        對(duì)于具有n個(gè)結(jié)點(diǎn)得完全二叉樹,如果按照從上至下從左至右得數(shù)組順序?qū)λ泄?jié)點(diǎn)從0開始編號(hào),則對(duì)于序號(hào)為i得結(jié)點(diǎn)有:
        (1). 若i>0,i位置節(jié)點(diǎn)得雙親序號(hào):(i-1)/2;i=0,i為根節(jié)點(diǎn)編號(hào),無雙親節(jié)點(diǎn)

        (2). 若2i+1<n,左孩子序號(hào):2i+1,2i+1>=n否則無左孩子

        (3). 若2i+2<n,右孩子序號(hào):2i+2,2i+2>=n否則無右孩子

        2.4、二叉樹得表示

        其實(shí)二叉樹得表示就和樹得表示差不多,區(qū)分節(jié)點(diǎn)而已,表示如下

        class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; }}3、二叉樹得遍歷

        下面都以此樹為例子。

        3.1、前序遍歷

        先訪問根節(jié)點(diǎn),再訪問左節(jié)點(diǎn),左節(jié)點(diǎn)不為空就遞歸前序遍歷,再訪問右節(jié)點(diǎn),右節(jié)點(diǎn)不為空就遞歸前序遍歷

        順序?yàn)椋? 2 4 5 3

        代碼實(shí)現(xiàn):

        public static void preorderTraversal(TreeNode root) { if(root == null){ return; } System.out.println(root.val); preorderTraversal(root.left); preorderTraversal(root.right); }3.2、中序遍歷

        先訪問左子節(jié)點(diǎn),左子節(jié)點(diǎn)不為空就遞歸中序遍歷,再訪問根節(jié)點(diǎn),然后再訪問右子節(jié)點(diǎn),右子節(jié)點(diǎn)不為空就遞歸中序遍歷

        順序?yàn)椋? 2 5 1 3

        代碼實(shí)現(xiàn):

        public static void inorder(TreeNode1 root){ if(root==null){ return; } inorder(root.left); System.out.println(root.val); inorder(root.right); }3.3、后序遍歷

        先訪問左子節(jié)點(diǎn),左子節(jié)點(diǎn)不為空就遞歸后序遍歷,再訪問右子節(jié)點(diǎn),右子節(jié)點(diǎn)不為空就遞歸后序遍歷,然后再訪問根節(jié)點(diǎn)

        順序?yàn)椋? 5 2 3 1

        代碼實(shí)現(xiàn):

        public static void postorder(TreeNode1 root){ if(root==null){ return; } postorder(root.left); postorder(root.right); System.out.println(root.val); }

         
        (文/葉子嘉)
        打賞
        免責(zé)聲明
        本文為葉子嘉推薦作品?作者: 葉子嘉。歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明原文出處:http://m.sneakeraddict.net/news/show-317624.html 。本文僅代表作者個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請(qǐng)及時(shí)聯(lián)系我們郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2023 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

        粵ICP備16078936號(hào)

        微信

        關(guān)注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯(lián)系
        客服

        聯(lián)系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號(hào): weishitui

        客服001 客服002 客服003

        工作時(shí)間:

        周一至周五: 09:00 - 18:00

        反饋

        用戶
        反饋

        久久99中文字幕久久| 亚洲av中文无码乱人伦在线播放| 亚洲V无码一区二区三区四区观看 亚洲爆乳精品无码一区二区三区 亚洲爆乳无码一区二区三区 | 亚洲AV区无码字幕中文色| 伊人热人久久中文字幕| 无码欧精品亚洲日韩一区| 亚洲中文字幕无码久久2017| 人妻系列无码专区久久五月天| 欧美激情中文字幕| 久久精品亚洲中文字幕无码麻豆| 曰韩中文字幕在线中文字幕三级有码| 亚洲av中文无码乱人伦在线播放 | 亚洲精品无码久久千人斩| AV无码久久久久不卡蜜桃| 免费无码一区二区三区| 精品久久无码中文字幕| 最近最新中文字幕高清免费| 亚洲AV成人无码久久精品老人| 日韩欧群交P片内射中文| 人妻夜夜添夜夜无码AV| 日本一区二区三区中文字幕 | 新版天堂资源中文8在线| 久久久久久久人妻无码中文字幕爆| 最近2019好看的中文字幕 | 无码人妻久久一区二区三区| 最近免费视频中文字幕大全| 人妻少妇久久中文字幕| 中文字幕欧美日韩在线不卡| 国产精品无码午夜福利| 亚洲色无码一区二区三区| 中文字幕在线观看日本| 中文字幕无码av激情不卡久久| 久久久久亚洲AV无码永不| 狠狠躁夜夜躁无码中文字幕| 国产一区三区二区中文在线 | 无码人妻精品一区二区三18禁| 最近中文字幕2019高清免费 | 无码乱码av天堂一区二区| 亚洲色中文字幕无码AV| 性无码专区一色吊丝中文字幕| 精品无码一区二区三区爱欲 |