樹
樹定義專業定義:
1、有且只有乙個稱為根的節點
2、有若干個互不相交的子樹,這些子樹本身也是一棵樹
通俗定義:
1、樹是由節點和邊組成
2、每個節點只有乙個父節點但可以有多個子節點
3、但有乙個節點例外,該節點沒有根節點,此節點稱為根節點
專業術語
節點父節點子節點
子孫堂兄弟
深度:從根節點到最底層節點的層數稱之為深度
根節點是第一層
葉子節點;(葉子就不能劈叉了)
沒有子節點的節點
非終端節點:
實際就是非葉子節點。
根節點既可以是葉子也可以是非葉子節點
度:子節點的個數稱為度。(一棵樹看最大的)
樹分類:
一般樹任意乙個節點的子節點的個數都不受限制
二叉樹(有序樹)
任意乙個節點的子節點的個數最多兩個,且子節點
的位置不可更改。
分類:一般二叉樹
滿二叉樹
在不增加樹的層數的前提下。無法再多
新增乙個節點的二叉樹就是滿二叉樹。
完全二叉樹
如果只是刪除了滿二叉樹最底層最右邊的
連續若干個節點,這樣形成的二叉樹就是
完全二叉樹。
森林n個互不相交的樹的集合
一般的二叉樹要以陣列的方式儲存,要先轉化成完全二叉樹,因為如果你
只存有效節點(無論先序,中序,後序),則無法知道這個樹的組成方式
是什麼樣子的。
樹的儲存(都是轉化成二叉樹來儲存)
二叉樹的儲存
連續儲存【完全二叉樹】
優點:查詢某個節點的父節點和子節點(也包括判斷有咩有)速度很快
缺點:耗用記憶體空間過大
鏈式儲存
一般樹的儲存
雙親表示法
求父節點方便
孩子表示法
求子節點方便
雙親孩子表示法
求父節點和子節點都很方便
二叉樹表示法
把乙個普通樹轉化成二叉樹來儲存
具體轉換方法:
設法保證任意乙個節點的
左指標域指向它的第乙個孩子
有指標域指向它的下乙個兄弟
只要能滿足此條件,就可以把乙個普通樹轉化成二叉樹
乙個普通樹轉化成的二叉樹一定沒有右子樹
森林的儲存
先把森林轉化為二叉樹,再儲存二叉樹,具體方式為:根節點
之間可以當成是兄弟來看待
二叉樹操作遍歷
先序遍歷【先訪問根節點】
先訪問根節點
再先序訪問左子樹
再先序訪問右子樹
中序遍歷【中間訪問根節點】
中序遍歷左子樹
再訪問根節點
再中序遍歷右子樹
後序遍歷【最後訪問根節點】
先後序遍歷左子樹
再後序遍歷右子樹
再訪問根節點
已知兩種遍歷序列求原始二叉樹
通過先序和中序 或者 中序和後續我們可以
還原出原始的二叉樹
但是通過先序和後續是無法還原出原始的二叉樹的
換種說法:
只有通過先序和中序, 或通過中序和後序
我們才可以唯一的確定乙個二叉樹
應用樹是資料庫中資料組織的一種重要形式(例如圖書館
的圖書分類一層一層往下分。)
作業系統子父程序的關係本身就是一棵樹
物件導向語言中類的繼承關係本身就是一棵樹
赫夫曼樹(樹的乙個特例)
樹基礎知識
陣列儲存方式的分析 優點 通過下標方式訪問元素,速度快。對於有序陣列,還可使用二分查詢提高檢索速度。缺點 如果要檢索具體某個值,或者插入值 按一定順序 會整體移動,效率較低 示意圖 畫出操作示意圖 2.鏈式儲存方式的分析 優點 在一定程度上對陣列儲存方式有優化 比如 插入乙個數值節點,只需要將插入節...
樹的基礎知識
二叉樹的儲存 連續儲存 完全二叉樹 優點 查詢某個節點的父節點和子節點 也包括沒有資料的節點 缺點 耗用記憶體空間過大 鏈式儲存一般樹的儲存 雙親表示法 求父節點方便 孩子表示法 求子節點方便 雙親孩子表示法 求父節點子節點都方便 二叉樹表示法 把乙個普通樹轉換成二叉樹來儲存具體的轉換方法 設法保證...
樹的基礎知識總結
一 樹的定義 1.樹 tree 是n n 0 個結點的有限集。n 0時稱為空樹,在任何一棵非空樹中,有且僅有乙個根結點,當n 1時,其餘結點可分為m個互不相交的有限集,其中每乙個集合本身又是一棵樹,並稱為根的子樹。2 結點的分類 結點擁有的子樹個數稱為結點的度。度為0的結點稱為葉結點或終端結點。度不...