AVL树后序遍历的过程是先遍历左子树,再遍历右子树,最后访问根节点。具体实现可以使用递归或栈实现。
递归实现:
class Node:
def __init__(self, val=None):
self.val = val
self.left = None
self.right = None
def postorderTraversal(root):
res = []
if not root:
return res
def dfs(node):
if node.left:
dfs(node.left)
if node.right:
dfs(node.right)
res.append(node.val)
dfs(root)
return res
栈实现:
def postorderTraversal(root):
res = []
if not root:
return res
stack = [(root, False)]
while stack:
cur, visited = stack.pop()
if visited:
res.append(cur.val)
else:
stack.append((cur, True))
if cur.right:
stack.append((cur.right, False))
if cur.left:
stack.append((cur.left, False))
return res
以上两种实现方式均能正确地返回AVL树的后序遍历结果。