Python递归实现树的遍历算法

2023-04-16 00:00:00 算法 遍历 递归

假设我们有一个二叉树的节点类,包含左子节点、右子节点和节点值:

class TreeNode:
    def __init__(self, val):
        self.left = None
        self.right = None
        self.val = val

为了演示二叉树的遍历算法,我们可以定义一个二叉树类,该类包含根节点,并提供前序遍历、中序遍历和后序遍历的方法:

class BinaryTree:
    def __init__(self, root=None):
        self.root = root

    # 前序遍历
    def preorder(self, root):
        if not root:
            return
        print(root.val)
        self.preorder(root.left)
        self.preorder(root.right)

    # 中序遍历
    def inorder(self, root):
        if not root:
            return
        self.inorder(root.left)
        print(root.val)
        self.inorder(root.right)

    # 后序遍历
    def postorder(self, root):
        if not root:
            return
        self.postorder(root.left)
        self.postorder(root.right)
        print(root.val)

使用以上代码,我们可以创建一个二叉树,并演示遍历算法,如下所示:

# 创建一个二叉树
node1 = TreeNode("p")
node2 = TreeNode("i")
node3 = TreeNode("d")
node4 = TreeNode("a")
node5 = TreeNode("n")
node6 = TreeNode("c")
node7 = TreeNode("o")
node1.left = node2
node1.right = node3
node2.left = node4
node2.right = node5
node3.left = node6
node3.right = node7
bt = BinaryTree(node1)

# 前序遍历
bt.preorder(node1)    # 输出 "p i a n d c o d"

# 中序遍历
bt.inorder(node1)     # 输出 "a i n d p c o d"

# 后序遍历
bt.postorder(node1)   # 输出 "a n d i c o d p"

上述代码输出了前序遍历、中序遍历和后序遍历的结果。这些算法都是基于递归实现的,每次递归都会遍历一个节点。在访问节点时,我们先访问当前节点的值,再访问其左子节点和右子节点。这样,就可以按照前序遍历的顺序访问整个树。同样的,不同的访问顺序会导致不同的遍历结果。

相关文章