117.info
人生若只如初见

python二叉树遍历代码怎么写

在Python中,可以使用递归或者迭代的方式来实现二叉树的遍历。以下是常见的三种二叉树遍历方式的代码示例:

  1. 前序遍历(Preorder Traversal):根节点 -> 左子树 -> 右子树

递归实现:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def preorderTraversal(root):
    if root is None:
        return []
    result = [root.val]
    result += preorderTraversal(root.left)
    result += preorderTraversal(root.right)
    return result

迭代实现:

def preorderTraversal(root):
    if root is None:
        return []
    stack = [root]
    result = []
    while stack:
        node = stack.pop()
        result.append(node.val)
        if node.right:
            stack.append(node.right)
        if node.left:
            stack.append(node.left)
    return result
  1. 中序遍历(Inorder Traversal):左子树 -> 根节点 -> 右子树

递归实现:

def inorderTraversal(root):
    if root is None:
        return []
    result = []
    result += inorderTraversal(root.left)
    result.append(root.val)
    result += inorderTraversal(root.right)
    return result

迭代实现:

def inorderTraversal(root):
    if root is None:
        return []
    stack = []
    result = []
    while stack or root:
        if root:
            stack.append(root)
            root = root.left
        else:
            node = stack.pop()
            result.append(node.val)
            root = node.right
    return result
  1. 后序遍历(Postorder Traversal):左子树 -> 右子树 -> 根节点

递归实现:

def postorderTraversal(root):
    if root is None:
        return []
    result = []
    result += postorderTraversal(root.left)
    result += postorderTraversal(root.right)
    result.append(root.val)
    return result

迭代实现:

def postorderTraversal(root):
    if root is None:
        return []
    stack = [root]
    result = []
    while stack:
        node = stack.pop()
        result.append(node.val)
        if node.left:
            stack.append(node.left)
        if node.right:
            stack.append(node.right)
    return result[::-1]

以上是常见的三种二叉树遍历方式的代码示例。根据具体需求选择合适的遍历方式。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe194AzsLAwFeBFE.html

推荐文章

  • linux的python如何进行进程管理

    在Linux中,可以使用Python的内置库os和subprocess进行进程管理 使用os.system()执行外部命令: import os # 执行外部命令,例如:ls
    os.system("ls") 使用...

  • linux的python怎样进行系统调用

    在Linux中,Python可以通过os和sys库进行系统调用 使用os库: os库提供了许多与操作系统交互的函数。例如,要使用os.system()执行系统命令,可以这样做:
    i...

  • python中set怎样进行集合排序

    在Python中,可以使用sorted()函数对集合(set)进行排序。sorted()函数返回一个排序后的列表(list),而不是集合,因为集合本身是无序的。以下是一个示例:

  • python中set如何进行集合转换

    在Python中,可以使用集合(set)的内置方法进行集合转换。以下是一些常用的集合转换方法: 将列表转换为集合: my_list = [1, 2, 3, 4, 5]
    my_set = set(m...

  • linux常用命令及用法是什么

    Linux常用命令及用法很多,以下是一些常见的命令及其用法: ls:列出目录中的文件和子目录。 ls:列出当前目录中的文件和目录。
    ls -l:以长格式列出文件和...

  • python字节流处理的方法是什么

    在Python中,字节流处理可以通过以下方法进行: 使用open()函数以二进制模式打开文件,并使用read()方法读取文件的字节流数据。 with open('file.bin', 'rb') as...

  • python读取图片数据的方法是什么

    Python中读取图片数据的方法有多种,以下是其中几种常用的方法: 使用PIL库(Python Imaging Library): from PIL import Image # 打开图片
    image = Image...

  • Spinner相关属性怎么设置

    Spinner组件的相关属性可以通过以下几种方式进行设置: 在XML布局文件中设置属性:在Spinner的XML标签中添加相关属性,格式如下: 其中,常用的属性包括: andro...