06 Jul 2024
Given the root of a binary tree, return the inorder traversal of its nodes’ values.
Example 1:

Input: root = [1,null,2,3] Output: [1,3,2]
Example 2:
Input: root = [] Output: []
Example 3:
Input: root = [1] Output: [1]
Constraints:
[0, 100].-100 <= Node.val <= 100Follow up: Recursive solution is trivial, could you do it iteratively?
中序遍历,就是左中右这种顺序
# 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]: res = [] self.traversal(root, res) return res def traversal(self, node: Optional[TreeNode], res: List[int]): if node is None: return self.traversal(node.left, res) res.append(node.val) self.traversal(node.right, res)
中序遍历,就是左中右顺序。
# 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]: answer: List[int] = [] st_node: List[int] = [] cur_node = root # 中序遍历:左中右 # 左子树依序入栈,到底后逐个弹出,处理中和右 while cur_node or st_node: # 先处理当前节点的左子树 while cur_node: st_node.append(cur_node) cur_node = cur_node.left # 将栈顶元素弹出栈(左节点首先会在栈顶) cur_node = st_node.pop() answer.append(cur_node.val) # 若无right,cur_node为None,会在下个循环中重新pop一个 cur_node = cur_node.right return answer