返回
花式遍历二叉树的美妙艺术
IOS
2023-12-28 06:09:10
花式遍历二叉树的美妙艺术
在计算机科学中,二叉树是一种重要的数据结构,它具有广泛的应用,包括搜索、排序、数据库索引等。我们通常使用前序遍历、中序遍历和后序遍历来遍历二叉树。然而,除了这些常规遍历方式之外,还存在着许多花式遍历方式,它们可以帮助我们以全新的视角审视这些基本数据结构。
本文将以一个题目为例,分享三种花式遍历方式:
- 从上到下打印二叉树
- 从下到上打印二叉树
- 从左到右打印二叉树
从上到下打印二叉树
从上到下打印二叉树是一种非常直观的遍历方式,它按照树的层级顺序依次打印每个节点。我们可以使用广度优先搜索(BFS)算法来实现这种遍历方式。
func printBinaryTreeFromTopToBottom(_ root: TreeNode?) {
guard let root = root else {
return
}
var queue: [TreeNode] = []
queue.append(root)
while !queue.isEmpty {
let node = queue.removeFirst()
print(node.val)
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
}
从下到上打印二叉树
从下到上打印二叉树与从上到下打印二叉树相反,它按照树的层级顺序依次打印每个节点,但从最底层开始打印。我们可以使用深度优先搜索(DFS)算法来实现这种遍历方式。
func printBinaryTreeFromBottomToTop(_ root: TreeNode?) {
guard let root = root else {
return
}
var stack: [TreeNode] = []
var result: [Int] = []
stack.append(root)
while !stack.isEmpty {
let node = stack.removeLast()
result.append(node.val)
if let left = node.left {
stack.append(left)
}
if let right = node.right {
stack.append(right)
}
}
for value in result.reversed() {
print(value)
}
}
从左到右打印二叉树
从左到右打印二叉树是一种非常有趣的遍历方式,它按照节点在树中的位置依次打印每个节点。我们可以使用中序遍历算法来实现这种遍历方式。
func printBinaryTreeFromLeftToRight(_ root: TreeNode?) {
guard let root = root else {
return
}
func inorderTraversal(_ root: TreeNode?) {
guard let root = root else {
return
}
inorderTraversal(root.left)
print(root.val)
inorderTraversal(root.right)
}
inorderTraversal(root)
}
这三种花式遍历方式只是二叉树遍历的冰山一角,还有许多其他有趣的花式遍历方式等待我们去探索。希望本文能够激发您的探索兴趣,让您对二叉树有更深入的理解。