• 树的遍历


    从二叉树的根节点出发,节点的遍历分为三个主要步骤:对当前节点进行操作(称为“访问”节点,或者根节点)、遍历左边子节点、遍历右边子节点。访问节点顺序的不同也就形成了不同的遍历方式。需要注意的是树的遍历通常使用递归的方法进行理解和实现,在访问元素时也需要使用递归的思想去理解。实际实现中对于前序和中序遍历可尝试使用递归实现。

    按照访问根元素(当前元素)的前后顺序,遍历方式可划分为如下几种:

    深度优先:先访问子节点,再访问父节点,最后访问第二个子节点。根据根节点相对于左右子节点的访问先后顺序又可细分为以下三种方式 a, 前序遍历(pre-order),根—>左—>右     b, 中序遍历(in-order)左—>根—>右    c, 后序遍历(post-order)左—>右—>根

    广度优先:先访问根节点,沿着树的宽度遍历子节点,直到所有节点均被访问为止

    二叉树的广度优先遍历和树的前序/中序/后序遍历不太一样,前/中/后序遍历使用递归,也就是栈的思想对二叉树进行遍历,广度优先一般使用队列的思想对二叉树进行遍历。

    python实现程序:

     1 class TreeNode:
     2     def __init__(self, val):
     3         self.val = val
     4         self.left, self.right = None, None
     5 
     6 class Traversal(object):
     7     def __init__(self):
     8         self.traverse_path = list()
     9 
    10     def preorder(self, root):
    11         if root:
    12             self.traverse_path.append(root.val)
    13             self.preorder(root.left)
    14             self.preorder(root.right)
    15 
    16     def inorder(self,root):
    17         if root:
    18             self.inorder(root.left)
    19             self.traverse_path.append(root.val)
    20             self.inorder(root.right)
    21 
    22     def postorder(self,root):
    23         if root:
    24             self.postorder(root.left)
    25             self.postorder(root.right)
    26             self.traverse_path.append(root.val)

    本文摘自https://algorithm.yuanbin.me/zh-hans/basics_data_structure/binary_tree.html

  • 相关阅读:
    Android 5.0以下系统支持TLS 1.1/1.2协议版本
    Java & Android未捕获异常处理机制
    Oppo Reno2 不允许安装非正式签名应用
    Android ADB 实用总结
    Android Studio中的非项目文件及项目目录下的全局搜索
    Android开发中网络代理设置实用总结
    基于时间偏差思路下的时间周期度量
    nodejs anywhere 搭建本地静态文件服务
    Android 支持库迁移到AndroidX
    项目Gradle版本从4.4升级到4.6
  • 原文地址:https://www.cnblogs.com/youyuan-wang/p/7268472.html
Copyright © 2020-2023  润新知