zoukankan      html  css  js  c++  java
  • Python实现二叉树的四种遍历

        对于一个没学过数据结构这门课程的编程菜鸟来说,自己能理解数据结构中的相关概念,但是自己动手通过Python,C++来实现它们却总感觉有些吃力。递归,指针,类这些知识点感觉自己应用的不够灵活,这是自己以后需要加强的地方。以下给出Python实现二叉树四种的遍历。

    # -*- coding: utf-8 -*-
    
    """
    Created on Mon Apr 03 19:58:58 2017
    
    @author: Administrator
    """
    class node(object):
        def __init__(self,data=None,left=None,right=None):
            self.data=data
            self.left=left
            self.right=right
           
    #深度
    def depth(tree):
        if tree==None:
            return 0
        left,right=depth(tree.left),depth(tree.right)
        return max(left,right)+1
    #前序遍历   
    def pre_order(tree):
        if tree==None:
            return
        print tree.data
        pre_order(tree.left)
        pre_order(tree.right)
    #中序遍历   
    def mid_order(tree):
        if tree==None:
            return
        mid_order(tree.left)
        print tree.data
        mid_order(tree.right)    
    #后序遍历   
    def post_order(tree):
        if tree==None:
            return
        post_order(tree.left)
        post_order(tree.right)   
        print tree.data
        
    #层次遍历    
    def level_order(tree):
         if tree==None:
            return 
         q=[]
         q.append(tree)
         while q:
             current=q.pop(0)
             print current.data
             if current.left!=None:
                q.append(current.left)
             if current.right!=None:
                q.append(current.right)
    #按层次打印
    def level2_order(tree):
         if tree==None:
            return 
         q=[]
         q.append(tree)
         results={}
         level=0
         current_level_num=1
         nextlevelnum=0
         d=[]
         while q: 
             current=q.pop(0)
             current_level_num-=1
             d.append(current.data)
             if current.left!=None:
                q.append(current.left) 
                nextlevelnum+=1
             if current.right!=None:
                q.append(current.right) 
                nextlevelnum+=1   
             if current_level_num==0:
                current_level_num=nextlevelnum
                nextlevelnum=0
                results[level]=d
                d=[]
                level+=1
         print results    
         
    if __name__=='__main__':  
        tree=node('D',node('B',node('A'),node('C')),node('E',right=node('G',node('F'))))  
        print'前序遍历:'  
        pre_order(tree)  
        print('
    ')  
        print('中序遍历:')  
        mid_order(tree)  
        print('
    ')  
        print '后序遍历:'  
        post_order(tree)  
        print('
    ')  
        print "层次遍历"
        level2_order(tree)        
  • 相关阅读:
    navBar
    strong ,weak
    Linux基础-07-系统的初始化和服务
    Linux基础-06-vi编辑器
    Linux基础-05-正文处理、tar、解压缩
    Linux基础-04-权限
    Linux基础-03-用户、群组
    Linux基础-02-目录文件管理
    Linux基础-01-Linux基础命令
    oh my zsh 安装
  • 原文地址:https://www.cnblogs.com/whb-20160329/p/6663958.html
Copyright © 2011-2022 走看看