二叉树的双序遍历(Double-order traversal)是指:对于二叉树的每个结点来说,先访问这个结点,再按双序遍历它的左子树;然后再一次访问这个结点,接下来按双序遍历它的右子树。请写出实现这种双序遍历的算法。
时间: 2024-12-12 11:30:32 浏览: 5
二叉树的双序遍历(也称为前序-后序遍历),通常包括三个阶段:首先访问根节点,然后递归地遍历左子树,最后递归地遍历右子树。对于每一个节点,我们会在第一次遍历时访问它,第二次遍历时再次访问它。以下是使用递归实现的Python代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def double_order_traversal(root):
"""
前序遍历(访问节点-左子树-右子树)-> 后序遍历(访问节点)
:param root: 二叉树的根节点
:return: 双序遍历结果列表
"""
if root is None:
return []
# 前序遍历得到的结果(保存当前节点)
pre_order = [root]
# 后续遍历会从当前节点开始,所以需要记录当前遍历到的节点
stack = [root]
while stack:
node = stack.pop()
# 将左子树压入栈,保证后序遍历时先处理左子树
if node.left:
stack.append(node.left)
# 然后访问当前节点(后序遍历)
pre_order.append(node.val)
# 接着将右子树压入栈
if node.right:
stack.append(node.right)
return pre_order
```
阅读全文