zoukankan      html  css  js  c++  java
  • 二叉树的广度优先遍历、深度优先遍历

    from queue import Queue
    
    """
    二叉树: 1.深度遍历 2.广度遍历 """ class Node(object): def __init__(self, value, left=None, right=None): self.value = value self.left = left self.right = right class BinaryTree(object): def __init__(self, root=None): self.root = root def pre_ord(self, result=[], node='root'): """先序遍历""" if node == 'root': node = self.root if node is not None: result.append(node.value) if node.left: self.pre_ord(result, node.left) if node.right: self.pre_ord(result, node.right) return result def in_order(self, result=[], node='root'): """中序遍历""" if node == 'root': node = self.root if node is not None: if node.left: self.in_order(result, node.left) result.append(node.value) if node.right: self.in_order(result, node.right) return result def post_order(self, result=[], node='root'): """后序遍历""" if node == 'root': node = self.root if node is not None: if node.left: self.post_order(result, node.left) if node.right: self.post_order(result, node.right) result.append(node.value) return result def breathSearch(self): """广度优先遍历""" if self.root is None: return None resultList = [] q = Queue() q.put(self.root) while not q.empty(): node = q.get() resultList.append(node.value) if node.left: q.put(node.left) if node.right: q.put(node.right) return resultList if __name__ == '__main__': # 构造二叉树的结点 rootNode = Node(50) rootNode.left = Node(20, left=Node(15), right=Node(30)) rootNode.right = Node(60, right=Node(70)) bt = BinaryTree(rootNode) # 构造二叉树 print(bt.pre_ord()) print(bt.in_order()) print(bt.post_order()) print(bt.breathSearch())
  • 相关阅读:
    Unity3d发布IOS(包含u3d自带IAP内购)的流程-小白篇(四)-Xcode配置发布部分
    U3D获取IOS设备所在时区、是否安装指定APP、判断真机还是模拟器
    Unity3d发布IOS(包含u3d自带IAP内购)的流程-小白篇(三)-u3d配置ios内购部分
    Unity3D 粒子系统
    Unity 3D 之Playerprefs
    物理公式
    C#之Lambda表达式
    C#中的Stack
    C#中的as(转)
    (转) Unity3D常用代码收集总结
  • 原文地址:https://www.cnblogs.com/reyinever/p/11308024.html
Copyright © 2011-2022 走看看