python資料結構與演算法(19)
阿新 • • 發佈:2018-12-04
⼆叉樹
⼆叉樹的基本概念
⼆叉樹是每個節點最多有兩個⼦樹的樹結構。通常⼦樹被稱作“左⼦樹”(left subtree)和“右⼦樹”(right subtree)
⼆叉樹的性質(特性)
性質1: 在⼆叉樹的第i層上⾄多有2^(i-1)個結點(i>0) 性質2: 深度為k的⼆叉樹⾄多有2^k - 1個結點(k>0) 性質3: 對於任意⼀棵⼆叉樹,如果其葉結點數為N0,⽽度數為2的結點總數 為N2,則N0=N2+1; 性質4:具有n個結點的完全⼆叉樹的深度必為 log2(n+1) 性質5:對完全⼆叉樹,若從上⾄下、從左⾄右編號,則編號為i 的結點,其左 孩⼦編號必為2i,其右孩⼦編號必為2i+1;其雙親的編號必為i/2(i=1 時為 根,除外)
(1)完全⼆叉樹——若設⼆叉樹的⾼度為h,除第 h 層外,其它各層 (1~ h-1) 的結點數都達到最⼤個數,第h層有葉⼦結點,並且葉⼦結點都是 從左到右依次排布,這就是完全⼆叉樹。
(2)滿⼆叉樹——除了葉結點外每⼀個結點都有左右⼦葉且葉⼦結點都處在最 底層的⼆叉樹。
⼆叉樹的節點表示以及樹的建立
通過使⽤Node類中定義三個屬性,分別為elem本身的值,還有lchild左孩⼦ 和rchild右孩⼦
class Node(object): """節點類""" def __init__(self, elem=-1, lchild=None, rchild=None): self.elem = elem self.lchild = lchild self.rchild = rchild 樹的建立,建立⼀個樹的類,並給⼀個root根節點,⼀開始為空,隨後新增節 點 class Tree(object): """樹類""" def __init__(self, root=None): self.root = root def add(self, elem): """為樹新增節點"""