117.info
人生若只如初见

如何实现TreeNode的非递归遍历

要实现TreeNode的非递归遍历,可以使用迭代方法和栈数据结构。这里以二叉树的前序遍历、中序遍历和后序遍历为例进行说明。

首先定义一个简单的TreeNode类:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
  1. 前序遍历(根 -> 左 -> 右)
def preorder_traversal(root):
    if root is None:
        return []

    stack, result = [root], []

    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. 中序遍历(左 -> 根 -> 右)
def inorder_traversal(root):
    if root is None:
        return []

    stack, result = [], []
    current = root

    while current or stack:
        while current:
            stack.append(current)
            current = current.left

        current = stack.pop()
        result.append(current.val)
        current = current.right

    return result
  1. 后序遍历(左 -> 右 -> 根)
def postorder_traversal(root):
    if root is None:
        return []

    stack, result = [root], []

    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/fe772AzsOCAFXBg.html

推荐文章

  • treenode如何参与到图的构建中

    在图的构建中,可以将TreeNode视为图的节点,每个TreeNode表示图中的一个节点。每个TreeNode可以有一个或多个子节点,这些子节点可以表示与该节点相邻的其他节点...

  • 使用treenode解决哪些类型的问题最合适

    TreeNode最适合用于解决树形结构的问题,例如二叉树、N叉树等。它可以帮助组织和管理树形数据,实现树的各种操作,如遍历、查找、插入、删除等。常见的应用场景包...

  • treenode的遍历方法有哪些

    深度优先搜索(DFS): 先序遍历:根节点 -> 左子树 -> 右子树
    中序遍历:左子树 -> 根节点 -> 右子树
    后序遍历:左子树 -> 右子树 -> 根节点 广度优先...

  • 如何通过treenode实现二叉树

    要通过TreeNode实现二叉树,首先需要定义一个TreeNode类来表示二叉树的节点。每个TreeNode对象应该包含一个值(例如整数或字符串)、左子节点和右子节点。
    ...

  • KeyValuePair在数据结构中的分类

    KeyValuePair是C#中用于表示键值对的数据结构,属于System.Collections.Generic命名空间。它通常用于表示单个键值对,例如在枚举的上下文中或当需要从方法返回多...

  • 如何实现KeyValuePair的序列化和反序列化

    要实现KeyValuePair的序列化和反序列化,你可以使用C#中的System.Runtime.Serialization命名空间
    using System;
    using System.IO;
    using System....

  • KeyValuePair在不同编程语言中的实现差异

    KeyValuePair 是一种通用的数据结构,用于表示键值对。在不同的编程语言中,它可能有不同的实现方式和名称。以下是一些常见编程语言中 KeyValuePair 的实现差异:...

  • KeyValuePair在大数据处理中的应用

    KeyValuePair在大数据处理中主要用于存储和管理单个键值对的数据结构,其应用主要体现在以下几个方面: 数据存储:在大数据处理中,KeyValuePair可用于存储从数据...