Definition
Generally a tree have 2 ways to traversal:
BFS 可以看作层序遍历,真菌在迷宫生长;DFS 则朝纵深遍历,如同闪电击中地面。
DFS
DFS - Depth-First traversals includes:
- pre-order:顺时针访问节点,每次经过左侧访问
- in-order:顺时针访问节点,每次 under node 访问
- post-order:顺时针访问节点,每次经过右侧访问
pre、in、post 指 current node 何时被访问(print),左右子树访问顺序皆为 Left first
Pre-order Traversal
preOrder(BSTNode x) {
if (x == null) return;
print(x.key)
preOrder(x.left)
preOrder(x.right)
}
In-order Traversal
inOrder(BSTNode x) {
if (x == null) return;
inOrder(x.left)
print(x.key)
inOrder(x.right)
}
Post-order Traversal
postOrder(BSTNode x) {
if (x == null) return;
postOrder(x.left)
postOrder(x.right)
print(x.key)
}
BFS
using Queue to track layers, Like:
public void BFS() {
Queue<Node<T>> queue = new Queue<>();
queue.enqueue(this);
BFS_helper(queue);
}
private void BFS_helper(Queue<Node<T>> queue) {
if (queue.isEmpty()) {
return;
}
Node<T> current = queue.dequeue();
if (current.left != null) {
queue.enqueue(current.left);
}
if (current.right != null) {
queue.enqueue(current.right);
}
System.out.print(current.value + " ");
BFS_helper(queue);
}