zoukankan      html  css  js  c++  java
  • 二叉树的遍历python 代码

     1 __author__ = "WSX"
     2 
     3 class Node:
     4     def __init__(self, val = None, left = None, right = None):
     5         self.val = val
     6         self.left = left
     7         self.right = right
     8 
     9 class tree:
    10     def __init__(self, L):
    11         self.val = L
    12 
    13     def bulid(self,root, i):    #将列表转化建立二叉树
    14         if i < len(self.val):
    15             root = Node(val = self.val[i])
    16             root.left = self.bulid(root.left, 2*i+1)
    17             root.right = self.bulid(root.right, 2*i+2)
    18             return root
    19         return root
    20 
    21     def preTraverse(self, tree_):
    22         root = tree_
    23         if root:
    24             print(root.val)
    25             self.preTraverse(root.left)
    26             self.preTraverse(root.right)
    27 
    28     def midTraverse(self, tree_):
    29         root = tree_
    30         if root:
    31             self.preTraverse(root.left)
    32             print(root.val)
    33             self.preTraverse(root.right)
    34 
    35 
    36     def postTraverse(self, tree_):
    37         root = tree_
    38         if root:
    39             self.preTraverse(root.left)
    40             self.preTraverse(root.right)
    41             print(root.val)
    42 
    43     def cengci(self, tree_):
    44         root = tree_
    45         queue = [root]  #借助队列
    46         while root and len(queue)!= 0:
    47             print(queue[0].val)  #visit
    48             if queue[0].left:
    49                 queue.append(queue[0].left)
    50             if queue[0].right:
    51                 queue.append(queue[0].right)
    52             queue.pop(0)
    53 
    54 T = tree(['1','2','3',"4","5","6"])
    55 root = T.bulid(Node(), 0)
    56 print("preTraverse"); T.preTraverse(root)
    57 print("postTraverse");T.postTraverse(root)
    58 print("midTraverse");T.midTraverse(root)
    59 print("cengci");T.cengci(root)

     非递归遍历:

     1 __author__ = "WSX"
     2 
     3 def pre(root):
     4     if not root:
     5         return None
     6     stack = [root]
     7     res = []
     8     while stack:
     9         res.append(root.val)
    10         if root.right:
    11             stack.append(root.right)
    12         if root.left:
    13             stack.append(root.left)
    14         root = stack.pop()
    15     return res
    16 
    17 def inOrderTraverse(node):
    18     stack = []
    19     pos = node
    20     while pos is not None or len(stack) > 0:
    21         if pos is not None:
    22             stack.append(pos)
    23             pos = pos.left
    24         else:
    25             pos = stack.pop()
    26             print(pos.val)
    27             pos = pos.right
    28 
    29 def postOrderTraverse(node):
    30     stack = [node]
    31     stack2 = []
    32     while len(stack) > 0:
    33         node = stack.pop()
    34         stack2.append(node)
    35         if node.left is not None:
    36             stack.append(node.left)
    37         if node.right is not None:
    38             stack.append(node.right)
    39     while len(stack2) > 0:
    40         print(stack2.pop().val)
  • 相关阅读:
    jQuery.ajax()方法笔记
    Docker安装
    Linux下Nginx+keepalived实现高可用
    Linux安装Nginx
    Redis主从、哨兵、Cluster特性
    Linux搭建redis集群
    Linux搭建redis单机
    HashMap知识总结(jdk1.8)
    如何避免form提交进行页面跳转
    异步上传文件,jquery+ajax,显示进度条
  • 原文地址:https://www.cnblogs.com/WSX1994/p/10744561.html
Copyright © 2011-2022 走看看