python數據結構-樹

樹是數據結構中常用到的一種結構,其實現較棧和隊稍為復雜一些。若樹中的所有節點的孩子節點數量不超過2個,則該為一個二叉樹。


“嵌套列表”表示樹

2017080815021788582607.png
20170808150217857149175.png
myTree = ['a',   #root
      ['b',  #left subtree
       ['d' [], []],
       ['e' [], []] ],
      ['c',  #right subtree
       ['f' [], []],
       [] ]
     ]

myTree = ['a', ['b', ['d',[],[]], ['e',[],[]] ], ['c', ['f',[],[]], []] ]
print(myTree)
print('left subtree = ', myTree[1])
print('root = ', myTree[0])
print('right subtree = ', myTree[2])

樹的根是myTree[0],根的左子樹是myTree[1],和右子樹是myTree[2]

二叉樹

20170808150217865294242.png
20170808150217881617379.png
20170808150217917424511.png
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by xuehz on 2017/8/8

#二叉樹

class Tree():
    def __init__(self, leftjd=0, rightjd=0, data =0):
        self.leftjd = leftjd
        self.rightjd = rightjd
        self.data = data

class Btree():
    def __init__(self, base = 0):
        self.base = base
    def empty(self):
        if self.base is 0:
            return True
        else:
            return False
    def qout(self, jd):
        """
        前序遍歷 NLR 根左右
        :param jd:
        :return:
        """
        if jd == 0:
            return
        print jd.data
        self.qout(jd.leftjd) #遞歸調用
        self.qout(jd.rightjd)
    def mout(self,jd):
        """
        中序遍歷 LNR 左根右
        :param jd:
        :return:
        """
        if jd == 0:
            return
        self.qout(jd.leftjd)
        print jd.data
        self.qout(jd.rightjd)

    def hout(self,jd):
        """
        后序遍歷 LRN 左右根
        :param jd:
        :return:
        """
        if jd ==0:
            return
        self.qout(jd.leftjd)  # 遞歸調用
        self.qout(jd.rightjd)
        print jd.data

if __name__ == '__main__':
    dj1 = Tree(data=8)
    dj2 = Tree(data=9)
    base = Tree(dj1, dj2, 7)# 根節點
    x = Btree(base)
    x.qout(x.base)
    print '========'
    x.mout(x.base)
    print '========'
    x.hout(x.base)


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 基于樹實現的數據結構,具有兩個核心特征: 邏輯結構:數據元素之間具有層次關系; 數據運算:操作方法具有Log級的平...
    yhthu閱讀 4,320評論 1 5
  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,173評論 0 12
  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,490評論 1 31
  • 婚姻不是愛情的墳墓,因為你壓根兒沒有愛情。 (一) 今天一大早起來,陽臺上已經捧了一地的明媚陽光,卻總有些人大煞風...
    寫文字的靜一閱讀 412評論 4 4
  • 交叉驗證(CrossValidation)方法思想是為了在不動用測試集之前,就評估一下模型是否過于復雜而引起過度擬...
    柴柴總閱讀 10,532評論 0 2