• 二叉树的深度优先遍历和广度优先遍历-Python


    # 二叉树系列
    class BinaryTree(object):
        def __init__(self, item):
            self.item = item
            self.left = None
            self.right = None
    
    def create_tree_data():
        a = BinaryTree(1)
        b = BinaryTree(2)
        c = BinaryTree(3)
        d = BinaryTree(4)
        e = BinaryTree(5)
        f = BinaryTree(6)
        g = BinaryTree(7)
    
        a.left = b
        a.right = e
        b.left = c
        b.right = d
        e.left = f
        e.right = g
        return a
    
    def xianxu_dfs(root):
        # 根左右,先访问根节点,再左右孩子
        print(root.item)
        if root.left:
            xianxu_dfs(root.left)
        if root.right:
            xianxu_dfs(root.right)
    
    def zhongxu_dfs(root):
        # 左右根,先访问左右孩子,再根节点
        if not root:
            return
        if root.left:
            zhongxu_dfs(root.left)
        print(root.item)
        if root.right:
            zhongxu_dfs(root.right)
    
    def houxu_dfs(root):
        if not root:
            return
        if root.left:
            houxu_dfs(root.left)
        if root.right:
            houxu_dfs(root.right)
        print(root.item)
    
    from queue import Queue
    def bfs(root):
        # 广度优先,逐层遍历,使用队列FIFO,存储层次数据
        q = Queue()
        q.put(root)
        while not q.empty():
            current_node = q.get()
            print(current_node.item)
            if current_node.left:
                q.put(current_node.left)
            if current_node.right:
                q.put(current_node.right)
    
    
    if __name__ == '__main__':
        head = create_tree_data()
        # xianxu_dfs(head)
        # zhongxu_dfs(head)
        # houxu_dfs(head)
        bfs(head)
    时刻记着自己要成为什么样的人!
  • 相关阅读:
    堆内存与栈内存
    struts2 ajax 实现方式
    Hibernate 配置派生属性
    高效 jquery 的奥秘
    对于Maven管理的项目制定虚拟目录
    ThreadLocal 笔记
    java Thread.join()
    vi 使用笔记
    浮动闭合方案:clearfix
    熬夜之弊及改善之法
  • 原文地址:https://www.cnblogs.com/demo-deng/p/14718769.html
Copyright © 2020-2023  润新知