二叉树先序遍历的非递归算法可以通过栈来实现。这里以Python为例,给出一种常见的实现方式:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preorderTraversal(root):
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
# 示例
if __name__ == "__main__":
# 构建一个示例二叉树
# 1
# / \
# 2 3
# / \
# 4 5
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
print(preorderTraversal(root)) # 输出: [1, 2, 4, 5, 3]
在这段代码中,我们定义了一个`TreeNode`类来表示二叉树的节点,然后实现了`preorderTraversal`函数来进行先序遍历。在函数中,我们使用了一个栈来保存待处理的节点,先访问根节点,然后将右孩子和左孩子(注意顺序)依次入栈,这样出栈的顺序就是先序遍历的顺序了。最后,我们将遍历的结果存储在列表中并返回。