文档章节

python 数据结构 tree 的插入和遍历

hyhlinux
 hyhlinux
发布于 2016/11/17 16:25
字数 273
阅读 17
收藏 0

# coding:utf-8
class Node(object):
    """docstring for Node"""

    def __init__(self, item=-1, lchild=None, rchild=None):
        self.item = item
        self.lchild = lchild
        self.rchild = rchild


class Tree(object):
    """docstring for Tree"""

    def __init__(self):
        self.root = Node()

    def add(self, item):
        '''
        添加一个节点
        顺序:从上至下,从左至右.
        '''
        node = Node(item)

        if self.root.item == -1:
            self.root = node
        else:
            myqueue = []
            tree_node = self.root
            myqueue.append(tree_node)

            while myqueue:
                tree_node = myqueue.pop(0)
                if not tree_node.lchild:
                    # 左孩子空,添加到左孩子.
                    tree_node.lchild = node
                    return
                elif not tree_node.rchild:
                    tree_node.rchild = node
                    return
                else:
                    # 若左右都不为空,加入该节点的左右孩子到列表
                    myqueue.append(tree_node.lchild)
                    myqueue.append(tree_node.rchild)

    def front(self, root=None):
        if not root:
            return
        print(root.item)
        self.front(root.lchild)
        self.front(root.rchild)

    def middle(self, root=None):
        if not root:
            return
        self.middle(root.lchild)
        print(root.item)
        self.middle(root.rchild)

    def later(self, root=None):
        if not root:
            return
        self.later(root.lchild)
        self.later(root.rchild)
        print(root.item)

    def level_search(self, root):
        '''
        从上至下,从左至右.
        '''
        if not root:
            return

        myQueue = []
        node = root
        myQueue.append(node)

        while myQueue:
            tree_node = myQueue.pop(0)
            print(tree_node.item)

            if tree_node.lchild:
                myQueue.append(tree_node.lchild)

            if tree_node.rchild:
                myQueue.append(tree_node.rchild)


def main():
    tree = Tree()
    for i in xrange(7):
        tree.add(i)

    # tree.front(tree.root)
    # 0 1 3 4 2 5 6
    # tree.middle(tree.root)
    # 3 1 4 0 5 2 6
    # tree.later(tree.root)
    #3, 4, 1, 5, 6, 2, 0
    tree.level_search(tree.root)
    # 0 1 2 3 4 5 6

if __name__ == '__main__':
    main()

##########################
#             0
#     1       |     2
# 3       4   |  5      6
##########################

 

© 著作权归作者所有

共有 人打赏支持
hyhlinux
粉丝 7
博文 167
码字总数 51777
作品 0
海淀
程序员
python环境下使用mysql数据及数据结构和二叉树算法(图)

python环境下使用mysql数据及数据结构和二叉树算法(图): 1 python环境下使用mysql 2使用的是 pymysql库 3 开始-->创建connection-->获取cursor-->操作-->关闭cursor->关闭connection->结束......

原创小博客
08/26
0
0
《Python从小白到大牛》第9章 数据结构

当你有很多书时,你会考虑买一个书柜,将你的书分门别类摆放进入。使用了书柜不仅仅使房间变得整洁,也便于以后使用书时方便查找。在计算机程序中会有很多数据,这些数据也需要一个容器将他们...

tony关东升
08/21
0
0
笨办法学 Python · 续 练习 19:改善性能

练习 19:改善性能 原文:Exercise 19: Improving Performance 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 这几乎完全是视频练习,其中我演示了如何改进你至今为止编写的代码的性...

apachecn_飞龙
2017/08/09
0
0
BeautifulSoup安装及其应用

BeautifulSoup 安装及其使用 BeautifulSoup 是个好东东。 官网见这里: http://www.crummy.com/software/BeautifulSoup/ 下载地址见这里:http://www.crummy.com/software/BeautifulSoup/bs......

Prefecter
2014/01/02
0
0
《Python官方文档》5.数据结构

数据结构 本章会更细节的讲一些你已经学过的东西,同时也会加一些新的内容 5.1 List有关方法 list有许多方法,以下是list方法的所有实例: 添加1个item到list的末尾,等同于 以迭代器方式追加...

caomaocao
01/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python深体验,常见的数据处理方式(必须要懂的)

1.缺失值处理 - 拉格朗日插值法 input_file数据文件内容(存在部分缺失值): from scipy.interpolate import lagrangeimport pandas as pdimport numpy as npinput_file = './dat...

无也Python
25分钟前
2
0
Spring MVC注解故障追踪记

Spring MVC是美团点评很多团队使用的Web框架。在基于Spring MVC的项目里,注解的使用几乎遍布在项目中的各个模块,有Java提供的注解,如:@Override、@Deprecated等;也有Spring提供的注解,...

Skqing
27分钟前
4
0
区块链入门教程以太坊源码分析cmd包分析

  兄弟连区块链入门教程以太坊源码分析cmd包分析。 ### cmd包概述 * geth 主要Ethereum CLI客户端。它是Ethereum网络(eth主网,测试网络或私有网)的入口点,使用此命令可以使节点作为ful...

兄弟连区块链入门教程
29分钟前
1
0
@Autowired 报红线

代码可正常跑,不过红线看着有点难受,解决方案 使用@Autowired(required=false) 或者@Resource. 这两者区别网上一大堆

斩神魂
34分钟前
1
0
DataTable中检索信息 (C#)

C#_从DataTable中检索信息 存在于内存中的虚拟表DataTable,绑定在数据显示控件后,如果想在再检索其中某些信息,可以利用DataTable.Select方法进行检索,避免了重复的读取数据库。Select方法...

CS-CS01
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部