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)        
  • 相关阅读:
    bzoj 4197 寿司晚宴
    Codeforces Round #429 (Div. 2)ABC
    Codeforces Round #386 (Div. 2) E
    UESTC 电子科大专题训练 数论 L
    UESTC 电子科大专题训练 数论 E
    Codeforces Round #396 D
    UESTC 电子科大专题训练 DP-E
    UESTC 电子科大专题训练 数据结构 L
    UESTC 电子科大专题训练 数据结构 K
    UESTC 电子科大专题训练 数据结构-E
  • 原文地址:https://www.cnblogs.com/whb-20160329/p/6663958.html
Copyright © 2011-2022 走看看