二叉树先序遍历的非递归算法具体实现


二叉树先序遍历的非递归算法可以通过栈来实现。这里以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`函数来进行先序遍历。在函数中,我们使用了一个栈来保存待处理的节点,先访问根节点,然后将右孩子和左孩子(注意顺序)依次入栈,这样出栈的顺序就是先序遍历的顺序了。最后,我们将遍历的结果存储在列表中并返回。