文档章节

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

hyhlinux
 hyhlinux
发布于 2016/11/17 16:25
字数 273
阅读 15
收藏 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 · 续 练习 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学习]Iterator 和 Generator的学习心得

又是一篇来自 limodou的学习记录 的文章 [Python学习]Iterator 和 Generator的学习心得 Iterator是迭代器的意思,它的作用是一次产生一个数据项,直到没有为止。这样在 for 循环中就可以对它...

henosteven
2013/02/18
0
0
Python操作Access数据库基本操作步骤分析

我们在这篇文章中公分了五个步骤详细分析了Python操作Access数据库的相关方法,希望可以给又需要的朋友们带来一些帮助。 AD: Python编程语言的出现,带给开发人员非常大的好处。我们可以利用...

张卫泉
2012/07/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ在CentOS环境安装

1.废话不多说准备一台虚拟机,系统为centos,我这里使用的系统版本如下图所示:

凌晨一点
44分钟前
0
0
线程池相关

在java.util.concurrent包下,提供了一系列与线程池相关的类。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度。当任务到达时,任务...

edwardGe
46分钟前
0
0
学习大数据这三个关键技术是一定要掌握!

大数据时代全面来临,大数据、人工智能等技术引领科技创新潮流,获得国家政策大力支持,前景广阔。学习大数据技术的人自然是络绎不绝, 学习大数据虽然是一个趋势,但也要注意大数据培训课程...

董黎明
今天
0
0
jetbrains 上传代码到github

设置中找github 获取token 验证是否成功 测试git 生成key,一路回车即可 ssh-keygen -t rsa -C “youremail@example.com” 打开pub复制key,需要再次输入一次密码 验证是否成功,输入yes即可...

阿豪boy
今天
0
0
分布式服务框架(拾遗)

前言 现在的大部分工程都已经是基于分布式架构来处理。所以这里对分布式框架做一个简单的总结 常用的RPC框架 RPC框架原理 RPC(Remote Procedure Call,远程过程调用)一般用来实现部署在不同...

kukudeku
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部