2025/5/10 【二叉树】前中后序递归遍历 LeetCode94/ 145/ 144 【√】
看明白了卡哥的讲解后,做的很快,很简单。代码随想录
写法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 Traversal(self, root, result): if root == None: return result.append(root.val) self.Traversal(root.left, result) self.Traversal(root.right, result) def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] self.Traversal(root, result) 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 preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] def dfs(node): if not node: return result.append(node.val) dfs(node.left) dfs(node.right) dfs(root) return result
这是把递归函数嵌套在 preorderTraversal
里面,减少类中方法的数量,但功能完全一致。
写法3:非递归版本,用栈
# 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 preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: if not root: 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
这个用的是手动维护一个栈来模拟递归过程,更接近底层执行逻辑,也适合面试中考察。
# 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 Traversal(self, root, result): if root == None: return self.Traversal(root.left, result) result.append(root.val) self.Traversal(root.right, result) def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] self.Traversal(root, result) return result
# 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 = rightb class Solution: def Traversal(self, root, result): if root == None: return self.Traversal(root.left, result) self.Traversal(root.right, result) result.append(root.val) def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] self.Traversal(root, result) return result