返回
后序遍历二叉树:LeetCode 145
前端
2023-09-18 10:14:48
二叉树后序遍历
二叉树的后序遍历是先访问左子树,再访问右子树,最后访问根节点。其递归算法如下:
def postorder_traversal_recursive(root):
if root is None:
return []
return postorder_traversal_recursive(root.left) + postorder_traversal_recursive(root.right) + [root.val]
二叉树后序遍历(使用栈)
使用栈进行后序遍历的思路是,先将根节点入栈。然后,循环执行以下步骤,直到栈为空:
- 出栈栈顶节点,将其放入结果列表。
- 如果栈顶节点有右孩子,将右孩子入栈。
- 如果栈顶节点有左孩子,将左孩子入栈。
代码如下:
def postorder_traversal_stack(root):
if root is None:
return []
stack = [root]
result = []
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
LeetCode 145
LeetCode 145 题要求我们实现二叉树的后序遍历。我们可以使用上述递归或栈的方法来解决。
使用递归的方法:
def postorderTraversal(self, root):
if not root:
return []
left = self.postorderTraversal(root.left)
right = self.postorderTraversal(root.right)
return left + right + [root.val]
使用栈的方法:
def postorderTraversal(self, root):
stack, result = [], []
while stack or root:
if root:
stack.append(root)
result.insert(0, root.val)
root = root.right
else:
root = stack.pop()
root = root.left
return result
总结
本文介绍了两种实现二叉树后序遍历的方法:递归和栈。这两种方法在时间复杂度和空间复杂度上都是相同的,因此选择哪种方法取决于具体的实现细节和喜好。