力扣-94.二叉树的中序遍历

思路:

按照“左子树->根节点->右子树”的顺序遍历二叉树结点,并将节点的值储存在列表中返回。

首先,我们定义了两个常量“WHITE”和“GRAY”,用来表示节点的状态,“WHITE”表示节点未被访问过,“GRAY”表示节点已经被访问过但其子节点还未被访问。

然后,我们创建一个空列表“res”用于储存遍历的结果,以及一个站“stack”用于辅助遍历。将根节点和初始状态“WHITE”入栈。

接下来我们进入循环,只要栈不空,就继续循环。在循环中,我们从栈顶部弹出一个节点和其对应的状态。

如果节点为空,表示已经到达叶子节点或空节点,直接跳过。

如果节点为“WHITE”,表示该节点还未被处理,按照“左中右”的顺序处理当前节点:首先,将右子节点和当前节点重新入栈,并将当前的状态置为“GRAY”,然后再将左子节点入栈。

如果节点状态为“GRAY”,表示左子树已经处理完毕,将当前节点的值加入到结果列表中。

最终,当栈为空时,说明表里完成,返回结果列表“res”即可。这样就完成了二叉树的中序遍历

题解:

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 定义颜色常量,WHITE表示未访问过的节点,GRAY表示已访问过的节点
        WHITE, GRAY = 0, 1
        # 用于存储中序遍历结果的列表
        res = []
        # 使用栈来模拟递归过程,初始时将根节点入栈,并标记为WHITE
        stack = [(WHITE, root)]
        while stack:
            color, node = stack.pop()
            # 如果当前节点为空,直接跳过
            if node is None:
                continue
            if color == WHITE:
                # 如果节点为白色,说明未处理过其左子树,按照左中右的顺序入栈
                stack.append((WHITE, node.right))
                stack.append((GRAY, node))
                stack.append((WHITE, node.left))
            else:
                # 如果节点为灰色,说明左子树已经处理完毕,将当前节点的值加入结果列表
                res.append(node.val)
        return res

相关推荐

  1. 94.

    2024-05-04 02:46:04       50 阅读
  2. 94-

    2024-05-04 02:46:04       57 阅读
  3. 94.

    2024-05-04 02:46:04       44 阅读
  4. -

    2024-05-04 02:46:04       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-04 02:46:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-04 02:46:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-04 02:46:04       82 阅读
  4. Python语言-面向对象

    2024-05-04 02:46:04       91 阅读

热门阅读

  1. 力扣-977.有序数组的平方

    2024-05-04 02:46:04       30 阅读
  2. PostgreSQL的扩展pgpool

    2024-05-04 02:46:04       34 阅读
  3. pyflink filter

    2024-05-04 02:46:04       27 阅读
  4. 【AI学习】人工智能 or 人造智能 or 人创智能

    2024-05-04 02:46:04       33 阅读
  5. 你用过最好用的AI工具有哪些?【模板】

    2024-05-04 02:46:04       29 阅读
  6. React 之 如何启动一个新的项目(六)

    2024-05-04 02:46:04       31 阅读
  7. python - mac安装mysqlclient

    2024-05-04 02:46:04       26 阅读
  8. 一步一步写线程之十一线程池应用内存池

    2024-05-04 02:46:04       33 阅读
  9. css实现瀑布流布局

    2024-05-04 02:46:04       32 阅读