1. 程式人生 > >python資料結構與演算法(19)

python資料結構與演算法(19)

⼆叉樹
⼆叉樹的基本概念
⼆叉樹是每個節點最多有兩個⼦樹的樹結構。通常⼦樹被稱作“左⼦樹”(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層有葉⼦結點,並且葉⼦結點都是 從左到右依次排布,這就是完全⼆叉樹。
python資料結構與演算法(19)


(2)滿⼆叉樹——除了葉結點外每⼀個結點都有左右⼦葉且葉⼦結點都處在最 底層的⼆叉樹。
python資料結構與演算法(19)
⼆叉樹的節點表示以及樹的建立
通過使⽤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):                              """為樹新增節點"""