Python中的树遍历算法
Python中的树遍历算法包括前序遍历、中序遍历和后序遍历。
前序遍历:根节点 → 左子树 → 右子树(可以记作“根-左-右”)
中序遍历:左子树 → 根节点 → 右子树(可以记作“左-根-右”)
后序遍历:左子树 → 右子树 → 根节点(可以记作“左-右-根”)
下面是代码实现:
# 定义树节点类 class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None # 前序遍历 def preorderTraversal(root): if not root: return [] res = [] stack = [root] while stack: node = stack.pop() res.append(node.val) if node.right: stack.append(node.right) if node.left: stack.append(node.left) return res # 中序遍历 def inorderTraversal(root): if not root: return [] res = [] stack = [] while root or stack: while root: stack.append(root) root = root.left node = stack.pop() res.append(node.val) root = node.right return res # 后序遍历 def postorderTraversal(root): if not root: return [] res = [] stack = [root] while stack: node = stack.pop() res.append(node.val) if node.left: stack.append(node.left) if node.right: stack.append(node.right) return res[::-1] # 测试样例 root = TreeNode('p') root.left = TreeNode('i') root.right = TreeNode('d') root.left.left = TreeNode('a') root.left.right = TreeNode('n') root.right.left = TreeNode('a') root.right.right = TreeNode('c') print(preorderTraversal(root)) # ['p', 'i', 'a', 'n', 'd', 'a', 'c'] print(inorderTraversal(root)) # ['a', 'i', 'n', 'p', 'a', 'd', 'c'] print(postorderTraversal(root)) # ['a', 'n', 'i', 'c', 'a', 'd', 'p']
以上是树的遍历算法的详细说明和代码演示。其中,代码中使用了一个树节点类来表示树。对于每个节点,都存储着一个值以及左右子树。在遍历算法中,我们使用了栈来保存节点,实现了不同的遍历方式。注意,由于栈是先进后出的数据结构,所以前序遍历中需要先将右子树入栈,再将左子树入栈;而后序遍历中需要先遍历左子树和右子树,最后再遍历根节点。
相关文章