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())
  • 相关阅读:
    Goahead 3.1.0 发布,嵌入式 Web 服务器
    jdao 1.0.2 发布,轻量级的orm工具包
    pythonbitstring 3.1.0 发布
    JavaScript 搜索引擎 lunr.js
    Difeye 1.1.4 版本发布
    Chronon 3.5 发布,支持 Java 7
    性能扩展的那些事儿:一味增加硬件并不能解决响应时间问题
    Eclipse SDK 4.2.2/Equinox 3.8.2 发布
    Linux Kernel 3.8.1 发布
    Armadillo C++ Library 3.800 发布
  • 原文地址:https://www.cnblogs.com/reyinever/p/11308024.html
Copyright © 2011-2022 走看看