python-leetcode-二叉树的中序遍历

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

python-leetcode-二叉树的中序遍历_第1张图片

python-leetcode-二叉树的中序遍历_第2张图片

python-leetcode-二叉树的中序遍历_第3张图片

方法1:递归实现

# 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
class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        
        def dfs(node):
            if not node:
                return
            dfs(node.left)      # 递归遍历左子树
            result.append(node.val)  # 访问根节点
            dfs(node.right)     # 递归遍历右子树
        
        dfs(root)
        return result

方法2: 迭代实现(栈)

# 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
class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result, stack = [], []
        curr = root

        while curr or stack:
            while curr:  # 先遍历左子树
                stack.append(curr)
                curr = curr.left
            curr = stack.pop()  # 访问根节点
            result.append(curr.val)
            curr = curr.right  # 遍历右子树

        return result

你可能感兴趣的:(leetcode,算法,职场和发展)