如何使用Python函数进行二叉树遍历?
发布时间:2023-06-25 11:01:03
在Python中,可以使用递归函数或迭代函数进行二叉树的遍历。二叉树遍历分为前序遍历、中序遍历和后序遍历。在遍历过程中,对结点的值进行操作或打印输出。
1. 递归二叉树遍历函数
递归函数是比较直观且易于理解的方法,其优点是代码简洁,并且易于实现。在递归函数中,分别对二叉树的左子树和右子树进行递归操作,直至遍历完整棵树。
前序遍历函数代码如下所示:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
self.preorder(root, res)
return res
def preorder(self, root, res):
if not root:
return
res.append(root.val)
self.preorder(root.left, res)
self.preorder(root.right, res)
中序遍历函数代码如下所示:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
self.inorder(root, res)
return res
def inorder(self, root, res):
if not root:
return
self.inorder(root.left, res)
res.append(root.val)
self.inorder(root.right, res)
后序遍历函数代码如下所示:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
self.postorder(root, res)
return res
def postorder(self, root, res):
if not root:
return
self.postorder(root.left, res)
self.postorder(root.right, res)
res.append(root.val)
2. 迭代二叉树遍历函数
迭代函数是利用栈的数据结构,模拟递归函数的过程,也可以实现二叉树的遍历。在迭代函数中,使用一个栈来存储待遍历的结点。初始时,将根节点入栈。当栈不为空时,弹出栈顶结点,并对其进行遍历操作,然后将其右子树和左子树依次入栈。
前序遍历函数代码如下所示:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res, stack = [], [root]
while stack:
node = stack.pop()
if node:
res.append(node.val)
stack.append(node.right)
stack.append(node.left)
return res
中序遍历函数代码如下所示:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res, stack = [], []
while stack or root:
while root:
stack.append(root)
root = root.left
root = stack.pop()
res.append(root.val)
root = root.right
return res
后序遍历函数代码如下所示:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res, stack = [], [root]
while stack:
node = stack.pop()
if node:
stack.append(node.left)
stack.append(node.right)
res.append(node.val)
return res[::-1]
在使用这些函数进行二叉树遍历时,需要注意的是,在使用递归函数进行遍历时,需要手动创建存储遍历结果的列表;而在使用迭代函数进行遍历时,需要使用辅助栈来存储待遍历的结点。此外,每个结点需要被访问两次以确保正确性。也就是,在访问该结点之前,需要先访问其左子树和右子树。
