您好,登錄后才能下訂單哦!
度: 結點擁有子樹的個數
葉子節點:沒有子節點的節點
樹的深度:節點的層數, 根節點默認為第一層。
有序 :樹的左右位置不能改變。
二叉樹常被用作二叉查找樹和二叉堆
性質1:在非空二叉樹的第i層至多有2^{i-1}個結點
性質2:深度為k的二叉樹至多有2^k-1個結點
性質3:對任何一棵二叉樹T,如果其中終端節點數為n0,度數為2的節點數為n2,則n0 = n2 + 1(n0表示度數為0的節點總數, n2表示度數為2的節點總數)
性質4:在完全二叉樹中,具有n個節點的完全二叉樹的深度為[log2n]+1,其中[log2n]+1是向下取整。
性質5:若對含 n 個結點的完全二叉樹從上到下且從左至右進行 1 至 n 的編號,則對完全二叉樹中任意一個編號為 i 的結點:
(1) 若 i=1,則該結點是二叉樹的根,無雙親, 否則,編號為 [i/2] 的結點為其雙親結點;
(2) 若 2i>n,則該結點無左孩子, 否則,編號為 2i 的結點為其左孩子結點;
(3) 若 2i+1>n,則該結點無右孩子結點, 否則,編號為2i+1 的結點為其右孩子結點。
除了葉結點外每一個結點都有左右子葉且葉結點都處在最底層的二叉樹,。
一棵深度為k,且有2^k-1個節點的二叉樹,稱為滿二叉樹
葉節點只能出現在最下層和次下層,并且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹
完全二叉樹是效率很高的數據結構,堆是一種完全二叉樹或者近似完全二叉樹,所以效率極高,像十分常用的排序算法、Dijkstra算法、Prim算法等都要用堆才能優化,幾乎每次都要考到的二叉排序樹的效率也要借助平衡性來提高,而平衡性基于完全二叉樹。
葉子結點只可能在最大的兩層上出現,對任意結點,若其右分支下的子孫最大層次為L,則其左分支下的子孫的最大層次必為L 或 L+1。
具有n個結點的完全二叉樹的深度為int(log2n)+1
出于簡便起見,完全二叉樹通常采用數組而不是鏈表存儲:
(1)若i為奇數且i>1,那么tree的左兄弟為tree[i-1];
(2)若i為偶數且i<n,那么tree的右兄弟為tree[i+1];
(3)若i>1,tree的父親節點為tree[i div 2];
(4)若2*i<=n,那么tree的左孩子為tree[2*i];若2*i+1<=n,那么tree的右孩子為tree[2*i+1];
(5)若i>n div 2,那么tree[i]為葉子結點(對應于(3));
(6)若i<(n-1) div 2.那么tree[i]必有兩個孩子(對應于(4))。
(7)滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿二叉樹。
前序遍歷
規則是若二叉樹為空,則空操作返回,否則先訪問根節點,然后前序遍歷左子樹,再前序遍歷右子樹。
應用場景:判斷兩個二叉樹是否相等,只要子樹根節點不同,那么就不等
中序遍歷
規則是若二叉樹為空,則空操作返回,否則從根節點開始(注意并不是先訪問根節點),中序遍歷根節點左子樹,然后訪問根節點,最后中序遍歷右子樹
后序遍歷
規則是若二叉樹為空,則空操作返回,否則從左到右先葉子后節點的方式遍歷左右子樹,最后訪問根節點
應用場景:刪除二叉樹,必須先刪除左右子樹,然后才能刪除根節點
層次遍歷
規則是若二叉樹為空,則空操作返回,否則從樹的第一層,也就是根節點開始訪問,從上到下逐層遍歷,在同一層中,按照從左到右的順序對節點逐個訪問
已知前序遍歷序列和中序遍歷序列,可以唯一確定一棵二叉樹
已知后序遍歷序列和中序遍歷序列,可以唯一確定一棵二叉樹
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。