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阅读 9,802评论 1 5
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 10,612评论 0 12
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 9,935评论 1 31
  • 婚姻不是爱情的坟墓,因为你压根儿没有爱情。 (一) 今天一大早起来,阳台上已经捧了一地的明媚阳光,却总有些人大煞风...
    写文字的静一阅读 3,003评论 4 4
  • 交叉验证(CrossValidation)方法思想是为了在不动用测试集之前,就评估一下模型是否过于复杂而引起过度拟...
    柴柴总阅读 13,579评论 0 2