当前位置:  编程技术>python

python实现的二叉树算法和kmp算法实例

    来源: 互联网  发布时间:2014-10-04

    本文导语:  主要是:前序遍历、中序遍历、后序遍历、层级遍历、非递归前序遍历、非递归中序遍历、非递归后序遍历 代码如下:#!/usr/bin/env python#-*- coding:utf8 -*- class TreeNode(object):    def __init__(self, data=None, left=None, right=None):        s...

主要是:前序遍历、中序遍历、后序遍历、层级遍历、非递归前序遍历、非递归中序遍历、非递归后序遍历

代码如下:

#!/usr/bin/env python
#-*- coding:utf8 -*-


class TreeNode(object):
    def __init__(self, data=None, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right


class Tree(object):
    def __init__(self, root=None):
        self.root = None

    def makeTree(self, data, left, right):
        self.root = TreeNode(data, left, right)

    def is_empty(self):
        """是否为空 """
        if self.root is None:
            return True
        return False

    def preOrder(self, r):
        """前序遍历 """
        if not r.is_empty():
            print r.root.data
            if r.root.left is not None:
                r.preOrder(r.root.left)
            if r.root.right is not None:
                r.preOrder(r.root.right)

    def inOrder(self, r):
        """中序遍历 """
        if not r.is_empty():
            if r.root.left is not None:
                r.preOrder(r.root.left)
            print r.root.data
            if r.root.right is not None:
                r.preOrder(r.root.right)

    def postOrder(self, r):
        """后续遍历 """
        if not r.is_empty():
            if r.root.left is not None:
                r.preOrder(r.root.left)
            print r.root.data
            if r.root.right is not None:
                r.preOrder(r.root.right)

    def levelOrder(self, r):
        """层级遍历 """
        if not r.is_empty():
            s = [r]
            while len(s) > 0:
                temp = s.pop(0)  # 先弹出最先append到的点
                if temp and temp.root is not None:
                    print temp.root.data
                    if temp.root.left is not None:
                        s.append(temp.root.left)
                    if self.root.right is not None:
                        s.append(temp.root.right)

    def preOrder1(self, r):
        """非递归 前序遍历 """
        stack = []
        current = r
        while len(stack) > 0 or (current and not current.is_empty()):
            while current and not current.is_empty():
                print current.root.data
                stack.append(current)
                current = current.root.left
            if len(stack) > 0:
                current = stack.pop()
                current = current.root.right

    def inOrder1(self, r):
        """非递归 中序遍历 """
        stack = []
        current = r
        while len(stack) > 0 or (current and not current.is_empty()):
            while current and not current.is_empty():
                stack.append(current)
                current = current.root.left
            if len(stack) > 0:
                current = stack.pop()
                print current.root.data
                current = current.root.right

    def postOrder1(self, r):
        """非递归 后续遍历 """
        stack = []
        current = r
        pre = None
        while len(stack) > 0 or (current and not current.is_empty()):
            if current and not current.is_empty():
                stack.append(current)
                current = current.root.left
            elif stack[-1].root.right != pre:
                current = stack[-1].root.right
                pre = None
            else:
                pre = stack.pop()
                print pre.root.data

    def leaves_count(self, r):
        """求叶子节点个数 """
        if r.is_empty():
            return 0
        elif (not r.root.left) and (not r.root.right):
            return 1
        else:
            return r.root.left.leaves_count(r.root.left) + r.root.right.leaves_count(r.root.right)


if __name__ == '__main__':
    """二叉树"""
    ra, rb, rc, rd, re, rf = Tree(), Tree(), Tree(), Tree(), Tree(), Tree()
    ra.makeTree("a", None, None)
    rb.makeTree("b", None, None)
    rc.makeTree("c", None, None)
    rd.makeTree("d", None, None)
    re.makeTree("e", None, None)
    rf.makeTree("f", None, None)
    r1, r2, r3, r4, r = Tree(), Tree(), Tree(), Tree(), Tree()
    r1.makeTree("-", rc, rd)
    r2.makeTree("*", rb, r1)
    r3.makeTree("+", ra, r2)
    r4.makeTree("/", re, rf)
    r.makeTree("-", r3, r4)
    r.preOrder(r)
    r.inOrder(r)
    r.postOrder(r)
    r.levelOrder(r)
    print r.leaves_count(r)


大学的时候学过kmp算法,最近在看的时候发现竟然忘了,所以去重新看了看书,然后用python写下了这个算法:

代码如下:

def kmp(text, pattern):
    """kmp算法 """
    pattern = list(pattern)
    next = [-1] * len(pattern)
    #next 函数
    i, j = 1, -1
    for i in range(1, len(pattern)):
        j = next[i - 1]
        while True:
            if pattern[i - 1] == pattern[j] or j == -1:
                next[i] = j + 1
                break
            else:
                j = next[j]
    #循环比较
    i, j = 0, 0
    while i < len(text) and j < len(pattern):
        if text[i] == pattern[j] or j == -1:
            i += 1
            j += 1
        else:
            j = next[j]
    #返回结果 如果匹配,返回匹配的位置,否则返回-1
    if j == len(pattern):
        print i – j
    else:
        print -1


    
 
 

您可能感兴趣的文章:

  • python基础教程之python消息摘要算法使用示例
  • python 实现插入排序算法
  • python冒泡排序算法的实现代码
  • python实现排序算法
  • python选择排序算法的实现代码
  • python插入排序算法的实现代码
  • python算法学习之桶排序算法实例(分块排序)
  • python k-近邻算法实例分享
  • Python算法之栈(stack)的实现
  • python实现k均值算法示例(k均值聚类算法)
  • python 实现归并排序算法
  • python 实现堆排序算法代码
  • python 算法 排序实现快速排序
  • 使用python实现递归版汉诺塔示例(汉诺塔递归算法)
  • python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
  • python算法学习之计数排序实例
  • python实现simhash算法实例
  • python计数排序和基数排序算法实例
  • 爬山算法简介和Python实现实例
  • python算法学习之基数排序实例
  • Python namedtuple(命名元组)使用实例
  • python实现的重启关机程序实例
  • Python 3 Tkinter教程之事件Event绑定处理代码实例
  • python调用短信猫控件实现发短信功能实例
  • Python文件操作类操作实例详解
  • python 基础学习第二弹 类属性和实例属性
  • Python实现冒泡,插入,选择排序简单实例
  • Python 时间处理datetime实例
  • Python实现类继承实例
  • Python continue语句用法实例
  • python3编写C/S网络程序实例教程
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • python实现绘制树枝简单示例
  • 基于python实现的网络爬虫功能:自动抓取网页介绍
  • Python3实现生成随机密码的方法
  • Python3通过request.urlopen实现Web网页图片下载
  • Python实现多行注释的另类方法
  • 在Python3中使用urllib实现http的get和post提交数据操作
  • python 布尔操作实现代码
  • juqery的python实现:pyquery学习使用教程
  • Python中无限元素列表的实现方法
  • 数据结构:图(有向图,无向图),在Python中的表示和实现代码示例
  • python使用循环实现批量创建文件夹示例
  • python 实现文件的递归拷贝实现代码
  • python判断端口是否打开的实现代码
  • python实现哈希表
  • python实现倒计时的示例
  • python实现图片批量剪切示例
  • 使用python实现strcmp函数功能示例
  • python实现dnspod自动更新dns解析的方法
  • python利用elaphe制作二维条形码实现代码
  • python实现socket端口重定向示例
  • Python不使用print而直接输出二进制字符串
  • 让python同时兼容python2和python3的8个技巧分享
  • Python中实现json字符串和dict类型的互转
  • 使用setup.py安装python包和卸载python包的方法
  • python异常信息堆栈输出到日志文件
  • 不小心把linux自带的python卸载了,导致安装一个依赖原python的软件不能安装,请问该怎么办?
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • Python开发者社区整站源码 Pythoner
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • python读取csv文件示例(python操作csv)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3