python实现树的深度优先遍历与广度优先遍历详解

 更新时间:2019年10月26日 11:56:46   作者:ketchup_ong  
这篇文章主要介绍了python实现树的深度优先遍历与广度优先遍历,详细分析了树的深度优先遍历与广度优先遍历原理及Python相关实现技巧,需要的朋友可以参考下

本文实例讲述了python实现树的深度优先遍历与广度优先遍历。分享给大家供大家参考,具体如下:

广度优先(层次遍历)

从树的root开始,从上到下从左到右遍历整个树的节点

数和二叉树的区别就是,二叉树只有左右两个节点

广度优先 顺序:A - B - C - D - E - F - G - H - I

代码实现

def breadth_travel(self, root):
    """利用队列实现树的层次遍历"""
    if root == None:
      return
    queue = []
    queue.append(root)
    while queue:
      node = queue.pop(0)
      print node.elem,
      if node.lchild != None:
        queue.append(node.lchild)
      if node.rchild != None:
        queue.append(node.rchild)

深度优先

深度优先有三种算法:前序遍历,中序遍历,后序遍历

先序遍历 在先序遍历中,我们先访问根节点,然后递归使用先序遍历访问左子树,再递归使用先序遍历访问右子树

根节点->左子树->右子树

 #实现 1
 def preorder(self, root):
    """递归实现先序遍历"""
    if root == None:
      return
    print root.elem
    self.preorder(root.lchild)
    self.preorder(root.rchild)

 #实现 2
 def depth_tree(tree_node):
   if tree_node is not None:
     print (tree_node._data)
     if tree_node._left is noe None:
       return depth_tree(tree_node._left)
     if tree_node._right is not None:
       return depth_tree(tree_node._right)

中序遍历 在中序遍历中,我们递归使用中序遍历访问左子树,然后访问根节点,最后再递归使用中序遍历访问右子树

左子树->根节点->右子树

def inorder(self, root):
   """递归实现中序遍历"""
   if root == None:
     return
   self.inorder(root.lchild)
   print root.elem
   self.inorder(root.rchild)

后序遍历 在后序遍历中,我们先递归使用后序遍历访问左子树和右子树,最后访问根节点

左子树->右子树->根节点

def postorder(self, root):
   """递归实现后续遍历"""
   if root == None:
     return
   self.postorder(root.lchild)
   self.postorder(root.rchild)
   print root.elem

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python超细致探究面向对象

    Python超细致探究面向对象

    面向对象编程是一种编程方式,此编程方式的落地需要使用“类”和 “对象”来实现,所以,面向对象编程其实就是对 “类”和“对象” 的使用,今天给大家介绍下python 面向对象开发及基本特征,感兴趣的朋友一起看看吧
    2022-06-06
  • PyCharm取消波浪线、下划线和中划线的实现

    PyCharm取消波浪线、下划线和中划线的实现

    这篇文章主要介绍了PyCharm取消波浪线、下划线和中划线的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • python字符串拼接+和join的区别详解

    python字符串拼接+和join的区别详解

    这篇文章主要给大家介绍了关于python字符串拼接+和join的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • python使用turtle库绘制树

    python使用turtle库绘制树

    这篇文章主要为大家详细介绍了python使用turtle库绘制树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 详解基于K-means的用户画像聚类模型

    详解基于K-means的用户画像聚类模型

    这篇文章主要介绍了基于K-means的用户画像聚类模型,本文中就是使用one-hot思想将不同维度的数据利用字典映射的方式将其转化为数据向量,需要的朋友可以参考下
    2022-05-05
  • python opencv鼠标画矩形框之cv2.rectangle()函数

    python opencv鼠标画矩形框之cv2.rectangle()函数

    鼠标操作属于用户接口设计,以前一直使用Qt来做,但是如果只需要简单的鼠标,键盘操作,直接调用opencv库的函数也未尝不可,下面这篇文章主要给大家介绍了关于python opencv鼠标画矩形框cv2.rectangle()函数的相关资料,需要的朋友可以参考下
    2021-10-10
  • Python爬虫动态IP代理使用及防止被封的方法

    Python爬虫动态IP代理使用及防止被封的方法

    在进行网络爬虫时,经常会遇到网站的反爬机制,其中之一就是通过IP封禁来限制爬虫的访问,为了规避这种限制,使用动态IP代理是一种有效的方法,本文将介绍在Python爬虫中如何使用动态IP代理,以及一些防止被封的方法,文中有详细的代码讲解,需要的朋友可以参考下
    2023-11-11
  • 关于使用pyqt弹出消息提示框的问题

    关于使用pyqt弹出消息提示框的问题

    PyQt是一个创建GUI应用程序的工具包。它是Python编程语言和Qt库的成功融合。Qt库是最强大的库之一。PyQt是由Phil Thompson 开发。接下来通过本文给大家介绍下使用pyqt弹出消息提示框的问题,需要的朋友可以参考下
    2022-01-01
  • Python采集大学教务系统成绩单实战示例

    Python采集大学教务系统成绩单实战示例

    这篇文章主要为大家介绍了Python采集大学教务系统成绩单实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • pycharm远程linux开发和调试代码的方法

    pycharm远程linux开发和调试代码的方法

    这篇文章主要介绍了pycharm远程linux开发和调试代码的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07

最新评论