# # @lc app=leetcode.cn id=94 lang=python3 # # [94] 二叉树的中序遍历 # # 中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中, # 中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。 # @lc code=start # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right from typing import Optional, List from utils import * class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: res = [] stack = [] if root: stack.append(root) while stack: node = stack[-1] if node: # 将该节点弹出,避免重复操作,下面再将右中左节点添加到栈中 stack.pop() # 添加右节点(空节点不入栈) if node.right: stack.append(node.right) # 添加中节点 stack.append(node) # 中节点访问过,但是还没有处理,加入空节点作为标记 stack.append(None) # 添加左节点(空节点不入栈) if node.left: stack.append(node.left) else: # 只有在遇到空节点的时候,才将下一个节点放进结果集中 # 将空节点弹出 stack.pop() # 重新取出栈中元素 node = stack.pop() res.append(node.val) return res s = Solution() root = creatBTree([1, None, 2], 0) s.inorderTraversal(root) # @lc code=end